首先,你这个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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)