Hibernate 修改数据先get出实体,然后修改属性值,但是没有save,修改后的数据也保存到数据库了。why

Hibernate 修改数据先get出实体,然后修改属性值,但是没有save,修改后的数据也保存到数据库了。why,第1张

首先,你这个old对象是在session中取得的,所以这个对象已经和数据库同步了,或者说相关联了

如果你的session中的old对象发生变法,提交事务后,数据库中的数据也会更新

你注视了save方法,不要以为session就不会在和数据库打交道了,在你整个方法执行完毕,session就会关闭,在关闭之前,session会自动提交事务,清理缓存,这个 *** 作注定是要和数据库打交道,也就是更新数据库数据

1使用文件来记录,下次运行时读取 2使用数据库,可以考虑单机数据库或网络数据库 3如果数据量小,使用注册表

或者可以通过程序来保存:

set fs=createobject("scriptingfilesystemobject")'创建文件 *** 作对象

if fsfileexists("C:\atxt") then'如果C盘Atxt存在,那么读取其内容

set txt=fsopentextfile("C:\atxt",forreading,true)

set txtn=txtreadall

else'

set txtf=fscreatetextfile("c:\atxt",true)'创建C盘下的atxt

do'无限循环

wscriptsleep 1000'延时一秒

txtfwrite atext'写入文本框中内容

loop'循环结束

end if'判断结束

保存对象时出错。

注意在“SavingData(保存数据)”对话框的下方有“Saveastype(保存类型)”的选择,shapefile和feature、classes(要素类)是有区别的,显示“保存对象时出错”也正是由于这种区别:要素类必须存储在数据库中,若保存类型选择了“要素类”,其保存路径就必须先选定一个数据库而非文件夹再保存,而文件夹中只能存储shapefile文件,否则就会出现上述错误。

hibernatecfgxml配置需要注意几个地方:

<property name="hibernatedialect">orghibernatedialectMySQLDialect</property>

<property name="hibernateconnectiondriver_class">commysqljdbcDriver</property>

<property name="hibernateconnectionurl">jdbc:mysql://localhost:3306/test</property>

上述对应三个配置项,均需要配置mysql对应的值。

一、查询有如下三种方式:

1、采用createQuery()的方式,不用写sql语句,设定map对应的类名,后面可跟where条件语句:

Query query = sessioncreateQuery("from Navigation n where nparentid=" + parentid);

2、采用<hibernate-mapping>配置文件中配置sql语句的方式:

Query query = sessiongetNamedQuery("findUserById");

querysetString("userId", userId);

通过setString()方法设置筛选条件;

xml配置示例如下:

<hibernate-mapping>

<query name="findUserById">

<![CDATA[

from User u where uid = :userId

]]>

</query>

</hibernate-mapping>

3、采用createSQLQuery()的方式,直接写sql语句:

SQLQuery query = sessioncreateSQLQuery("select from adm_navigation where parentid=" + parentid);

queryaddEntity(Navigationclass); //需要设置对应的类

二、insert插入 *** 作:

创建新的数据对象,设置属性之后,调用:

sessionsave(obj);

txcommit()方法保存到数据库;

其中session为:Session session = new Configuration()configure()buildSessionFactory();

tx为:Transaction tx = sessionbeginTransaction();

需要引入包:

import orghibernateSessionFactory;

import orghibernatecfgConfiguration;

import orghibernateTransaction;

三、update更新 *** 作与insert插入 *** 作类似:

首先调用select查询方法,从数据库中读取出对象或对象数组,

然后给对象设置新的属性值,

再调用sessionsave(obj)和txcommit()方法保存到数据库中。

你对flush和commit的意思没有理解到:

1,flush代表刷新,同步一级缓存中的对象到数据库中,仅仅代表把SQL刷到了数据库中,

2,commit代表提交事务,txcommit之后,之前发送的SQL才真正提交了,数据表里面才有值;

3,在默认情况下,commit之前都要自动调用flush,

所以:

1,sessionsave();sessionflush()只是把SQL发到了数据库中,事务没有提交,数据表中还是没有数据的,

2,sessionsave(),transactioncommit(),在commit的之前,隐含调用了flush,即发送了SQL,又提交了事务,所以有值;

你可以看看我的个人说明,里面有hibernate的更详细的视频资料。希望对你有用。

以上就是关于Hibernate 修改数据先get出实体,然后修改属性值,但是没有save,修改后的数据也保存到数据库了。why全部的内容,包括:Hibernate 修改数据先get出实体,然后修改属性值,但是没有save,修改后的数据也保存到数据库了。why、VB中怎样保存数据(保存在VB数据库里)、数据上传成功,但保存相关信息时出现错误,原因是:SaveDataBas等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9485473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存