hibernate自动更新持久化类的问题?

有碰到过改变了一个持久化类的值但是没有主动更新到数据库结果hibernate自动把值更新到数据库了。看了网上的一些帖子和解答感觉语焉不详,说什么持久化类只要做了改变hibernate就会自动更新到数据库,照这个说法我们都不用手动去做update操作了?另外没有显式的update操作我怎么知道hibernate什么时候去更新呢?求高人解答,最好能有hibernate的官方说明或文档。

2个回答

hibernate对你的持久化bean做了动态代理,也就是你hibernate映射文件,对应的bean对根据cglib生成的新字节码文件,
在你做set操作改变其值的时候,它会试图去更新数据库数据

w172087242
little_how 如果有帮助,希望能结帖
3 年多之前 回复
w172087242
little_how 回复malie1981: 那是因为有些设置的是只读事务,那样就不会更新数据库,还有的手动清除了session缓存的结果集,清除方法evict
3 年多之前 回复
malie1981
malie1981 不好意思,忘了感谢你的回答了
3 年多之前 回复
malie1981
malie1981 但是这种自动更新的情况似乎并不是每次都发生。不然的话所有取出来的持久化类不是都要先分离掉才能做赋值操作了。但是一般项目代码并没有太过关注这个事情。我觉得hibernate这么做不是太好
3 年多之前 回复

是的,
隐式的修改:注解的实体和对象,修改了自动同步数据库(添加了对事物的支持)
显式的修改:就是比较传统的hql、sql这样的更新语句

建议使用显式的修改,比较明确

malie1981
malie1981 回复伈照不宣: 我看到hibernate持久化类不需要显式update只要调用flush就会自动提交,而自动flush的情况是1,调用某些查询的时候2,transaction commit的时候3,手动调用flush的时候,因为我在set某些值后又调用了实体中的get方法获得某些属性进行判断,在这个判断的过程中抛出异常,会不会是在调用get方法的时候会触发flush导致更新到数据库?
3 年多之前 回复
zy_281870667
Bug开发攻城狮 回复malie1981: 我们控制事务一般是使用spring的aop的,它是针对我们代码对session的操作而执行事务的,hibernate的隐式修改,是根据代理对象的字节码更新数据库的,不属于我们的代码操作,所以不属于aop管理,代码异常了,也就不能回滚了
3 年多之前 回复
malie1981
malie1981 回复伈照不宣: 这样好像有点麻烦。另外一个疑问是这个隐式修改难道不受事务控制吗?程序在设置了值之后后面的代码中抛出了runtimeexception错误,但是这个隐式更新还是执行了。如果是按照显式更新的事务理解发生runtimeexception整个事务应该是会回滚的
3 年多之前 回复
zy_281870667
Bug开发攻城狮 回复malie1981: 在service关闭事务,在执行特定的方法再开启事务,显式的修改
3 年多之前 回复
malie1981
malie1981 谢谢回复,请问有没有办法在hibernate的配置或者参数设置里不让他隐式修改,很多程序员并没有注意到这个问题,这样会很危险
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
hibernate持久化类的问题
package hibernate.mapping;rnrnimport java.awt.TextArea;rnimport java.io.Serializable;rnimport java.sql.Timestamp;rnrnpublic abstract class BaseTbBlank implements Serializable rnrn private long blank_id;rn private long difficulty;rn private hibernate.mapping.TbChapter chapter_id;rn private TextArea description;rn private String answer1;rn private String answer2;rn private String answer3;rn private Timestamp in_date;rn private java.lang.Character submit_user;rn private long ratio;rn private java.lang.Character defuct;rn public void setBlank_id(long blank_id) rn this.blank_id = blank_id;rn rn public long getBlank_id() rn return blank_id;rn rn public void setChapter_id(hibernate.mapping.TbChapter chapter_id) rn this.chapter_id = chapter_id;rn rn public hibernate.mapping.TbChapter getChapter_id() rn return chapter_id;rn rn public void setDescription(TextArea description) rn this.description = description;rn rn public TextArea getDescription() rn return description;rn rn public void setDifficulty(long difficulty) rn this.difficulty = difficulty;rn rn public long getDifficulty() rn return difficulty;rn rn public void setAnswer1(String answer1) rn this.answer1 = answer1;rn rn public String getAnswer1() rn return answer1;rn rn public void setAnswer2(String answer2) rn this.answer2 = answer2;rn rn public String getAnswer2() rn return answer2;rn rn public void setAnswer3(String answer3) rn this.answer3 = answer3;rn rn public String getAnswer3() rn return answer3;rn [color=#FF0000][/color]rn public void setSubmit_user(java.lang.Character submit_user) rn this.submit_user = submit_user;rn rn public java.lang.Character getSubmit_user() rn return submit_user;rn rn public void setIn_date(Timestamp in_date) rn this.in_date = in_date;rn rn public Timestamp getIn_date() rn return in_date;rn rn public void setRatio(long ratio) rn this.ratio = ratio;rn rn public long getRatio() rn return ratio;rn rn public void setDefuct(java.lang.Character defuct) rn this.defuct = defuct;rn rn public java.lang.Character getDefuct() rn return defuct;rn rnrnpackage hibernate.mapping;rnrnimport java.awt.TextArea;rnimport java.sql.Timestamp;rnrnpublic class TbBlank extends BaseTbBlankrnrn public TbBlank()rn super();rn rn public TbBlank(long blank_id)rn [color=#FF0000]super(blank_id);[/color]rn rn public TbBlank(rn long blank_id,rn long difficulty,rn hibernate.mapping.TbChapter chapter_id,rn TextArea description,rn String answer1,rn String answer2,rn String answer3,rn Timestamp in_date,rn java.lang.Character submit_user,rn long ratio,rn java.lang.Character defuctrn )rn rn super([color=#FF0000]blank_id,rn difficulty,rn chapter_id,rn description,rn answer1,rn answer2,rn answer3,rn in_date,rn submit_user,rn ratio,rn defuctrn );[/color] rnrn在myeclipse中提示错误rn不知道什么原因rn不知道super()这个方法怎么重载了rn
hibernate生成持久化类的问题
我用myeclipse生成持久化类时为什么总是多出一个来,比如说user.java,它就会多出一个userID.java.rn但是我连别人的数据库生成就没有这个问题,请问高手们是怎能么回事呀,应怎么解决呀,急!!
【hibernate学习】Hibernate持久化类
1、持久化类的概念: 什么是持久化,将内存中的Java对象永久的存储到数据库中的这个过程称为持久化。 2、什么是持久化类:一个Java对象与我们的数据库中的表建立了映射联系,这个类我们就称之为持久化类。 3、持久化类的编写规则: (1)对持久化类提供一个无参数构造(hiberante底层需要使用反射生成实例) (2)对私有属性提供getter和setter方法(hibernate中设置或...
hibernate 持久化类
持久化类是什么 持久化: 将内存中的一个对象持久化到数据库中。 持久化类: 一个Java对象与数据库的表产生了映射关系。 = java类 + 映射文件 持久化类的编写规则 持久化类必须要有一个无参构造方法 – 提供给框架反射 成员变量私有,有针对成员变量的getter和setter方法 持久化类提供一个唯一的标识OID 和 数据库表中的主键对应 OID是唯一的不然会报错 持久化类...
Hibernate持久化类的理解
Hibernate持久化类的理解对于映射(mapping),有两套API,一个是Hibernate Session,另一个是Java Persistence EntityManager。后者是Java持久化的标准,因此,允许改变持久化实现而不会出现问题,很多实现都是参考了这个标准的。这里讲的是Hibernate Session。
Hibernate持久化类详解
2 Hibernate持久化类详解 上接Hibernate入门学习:https://blog.csdn.net/biggerchong/article/details/84229658  目录 2 Hibernate持久化类详解 2.1持久化类的编写规则 2.2主键生成策略 2.2.1主键的分类 2.2.2 hibernate中主键生成策略 2.2.3 持久类对象3种状态 2...
Hibernate持久化类
持久化类: 遵循四条主要的规则: 1、实现一个默认(即无参数的)构造方法(constructor)构造方法可以不是public的,hibernate可以使用ConStructor.newInstance()来实例化它们。强烈建议,在Hibernate中,为了运行期代理的生成,构造方法至少是包内可见的。 2、提供一个标识属性(可选)映射到数据库表的主键字段。这个属性类型可以是任何的原始类型、原始类型...
Hibernate创建持久化类
一 JavaBean的四点原则 1.必须是公有的类 2.提供公有的不带参数的默认的构造方法 3.属性私有 4.属性setter/getter封装     二 创建一个学生持久化类 import java.util.Date; //学生类 public class Students { /* * JavaBeans的四点原则
Hibernate持久化类要求
1 提供一个无参构造器 2 提供一个标识属性 标示属性通常隐射数据库表的主键字段 3  为类中每个成员都提供setter和getter方法 4 使用非final类 5 如果涉及到集合操作 还要提供equals()和hashCode()方法。
Hibernate持久化类概述
什么是持久化类 持久化:将内存中的一个对象持久化到数据库中的过程。 持久化类:Hibernate是一个ORM框架,因此当一个Java对象与数据库的表建立了映射关系时,那么在这个类在Hibernate中称为是持久化类,即:持久化类=Java类+映射文件 持久化类的编写规则 对持久化类提供一个无参数的构造方法:Hibernate底层需要使用反射生成对象实例; 属性私有,对私有属性提供public...
Hibernate持久化类与主键生成策略
一、持久化类 持久化类(Persistent Object)实际上就是POJO+hbm.xml。在Hibernate中,PO的编写规则为: 提供一个public权限的无参构造; 对属性进行private声明,并提供public getter/setter; 在PO中必须提供一个标识符(OID),OID与数据库的主键对应; PO中尽量使用基本数据类型的包装类(因为包装类默认null,而基本
Hibernate中的持久化类
Hibernate中的持久化类一、什么是持久化类:持久化是将程序数据在持久状态和瞬时状态间转换的机制。 持久化类(persistent class):是指它的实例可以被hibernate持久化地保存到数据库中,并且能从数据库读取的类。持久化类 = 实体类 + 映射文件。二、持久化类的编写规范 提供一个无参数 public访问控制符的构造器:因为会用到反射。 提供一个标识属性,映射数据表主键字段
hibernate 持久化类要求
1.建议要有一个持久化标识符(id) 2.持久化标识符要使用包装类(Integer),基本类型有默认值; 3.无参构造器 4.getter和setter方法 5.持久化类不能是final类 6.持久化类中如使用了集合类型数据,只能使用接口类型声明(List/Map/Set)
Hibernate持久化类配置文件
  首先我们应该先来了解SSH框架。 1.SSH struts是一个框架,它在网站中起到了控制层的作用。例如表单提交、获取数据、进行一些业务操作等,都是在struts里实现的。 spring是一个框架,是用来把struts和hibernate连接在一起的。通过它,可以配置struts中的action要调用哪个业务逻辑层的service类,service类要调用哪个数据操作层的dao类。...
Hibernate持久化类配置问题
下面这个类是一个树结构的节点,我想用Hibernate的OneToMany来实现树的结构,报错信息在后面,实在弄不明白了,各位帮帮忙...rnrn[code=Java]rnpackage model;rnrnimport java.util.Set;rnrnimport javax.persistence.Entity;rnimport javax.persistence.FetchType;rnimport javax.persistence.GeneratedValue;rnimport javax.persistence.Id;rnimport javax.persistence.ManyToOne;rnimport javax.persistence.OneToMany;rnrnimport org.hibernate.annotations.GenericGenerator;rnrnimport com.sun.istack.internal.NotNull;rnrnrn@Entityrnpublic class Node rn private int nodeid;//主键rn private String nodename;//节点名rn private int nodelevel;//节点层级rn// private int nodeSerialNo;//节点序号rn private Node parentnode;//父节点rn private Set childnodes;//子节点rn public Node()rn rn rn @Idrn @GeneratedValue()rn @GenericGenerator(name="EAM",strategy="native")rn public int getNodeid() rn return nodeid;rn rn public void setNodeid(int nodeid) rn this.nodeid = nodeid;rn rn @NotNullrn public String getNodename() rn return nodename;rn rn public void setNodename(String nodename) rn this.nodename = nodename;rn rn @NotNullrn public int getNodelevel() rn return nodelevel;rn rn public void setNodelevel(int nodelevel) rn this.nodelevel = nodelevel;rn rn @OneToMany(mappedBy="parentnode",fetch=FetchType.EAGER)rn public Node getParentnode() rn return parentnode;rn rn public void setParentnode(Node parentnode) rn this.parentnode = parentnode;rn rn @ManyToOnern public Set getChildnodes() rn return childnodes;rn rn public void setChildnodes(Set childnodes) rn this.childnodes = childnodes;rn rnrn[/code]rn报错信息:rnorg.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: model.Node.parentnodernrn org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:324)rn org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1723)rn org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)rn org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)rn org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)rn org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)rn org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)rn org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1856)rn controller.TheStructure.enter(TheStructure.java:51)rn sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)rn sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)rn sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)rn java.lang.reflect.Method.invoke(Method.java:597)rn com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)rn com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)rn com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)rn com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)rn org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)rn com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)rn com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)rn com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)rn com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)rn com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)rn org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)rn org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)rn org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)rn org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)rn org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)rn org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)rn org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)rn org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)rn org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)rn org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)rn org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)rn org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)rn org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)rn org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)rn org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)rn java.lang.Thread.run(Thread.java:619)rn rnrn
Hibernate中持久化类
Hibernate中持久化类 一、编写规则 •    提供一个无参数 public访问控制符的构造器 •    提供一个标识属性,映射数据表主键字段 •    所有属性提供public访问控制符的 set  get 方法(javaBean) •    标识属性应尽量使用基本数据类型的包装类型(int->Integer等) •    不要用final修饰实体 (将无法生成代理对象进行
Hibernate自动生成持久化类
我使用MyEclipse6.5+Hibernate3.2自动生成持久化类的时候,表名tb_content(id, content两列),自动生成了两个类一个是TbContentId,另一个是TbContent。TbContentId包含id, content两个字段,而TbContent只包含id一个字段,而我理解中的是应该自动生成包含id, content两个字段的TbContent类,不知道为什么会出现这个结果,应该怎么解决?
《精通hibernate:java持久化...》---持久化类
一,注意事项: 1,持久化类的OID对象标识符以及对应的数据库中的主键,一般不具有业务含义只用于标识作用,它们的生成不需要我们人为去设置。它们的生成通常由hibernate持久化类或由数据库系统自动生成。 因此,作为一种良好的习惯,我们应该把持久化类的这个OID的对应的setXXX()方法设置为private,这样目的是不让业务逻辑层类去人为设置OID的值。但是hibernate能够通过jav
Hibernate之持久化类,持久化对象状态和缓存机制
一,持久化类     1,含义:一个Java类和数据库表建立了映射关系,那么这个类就是持久化类。     2,书写规范:             a,具有无参构造方法。因为Hibernate底层需要使用反射机制生成类的实例。             b,具有私有属性,并对私有属性提供getter和setter方法。因为Hibernate底层会将查询到的数据进行封装。           ...
openstack-neutron-架构(持续更新)
持续更新
Hibernate配置文件详解和持久化类
一、映射文件配置 1、class (1)name:实体类的全类名 (2)table:与实体类对应的表名 (3)dynamic-insert:动态插入 默认值:false;当值为true时,如果字段值为null,不参与insert语句 (4)dynamic-update:动态更新 默认值:false;当值为true时,没有改动过该属性,将不会生成到update语句中 2、id (1
hibernate 持久化类编写规则
我们在hibernate中编写持久化类时需要注意以下几点: 1、持久化类需要提供无参的构造方法,因为hibernate的底层是通过反射来生成类的实例的。 2、持久化类的属性需要为private,并提供get、set方法。 3、持久化类的属性尽量使用包装类,包装类默认值为null,不容易引起歧义 4、持久化类要有一个唯一标识OID与表 的主键对应 5、持久化类尽量不要用final修饰,hi...
hibernate 第四章学习笔记(持久化类)
1、hibernate持久化类的4个主要规则 [list] [1]实现一个默认的无参构造方法 [2]为持久化类增加一个标识属性 [3]持久化类最好不要用final修饰 [4]为持久化类声明访问器(accesstor)和是否可变标志(mutator),理解是添加setter,getter方法,可变标志??isXXX [/list] 2、实现equals和hashCode方法 ...
hibernate(七)持久化类的介绍
1  什么是持久化类 名称 概念 持久化 将内存中的一个对象持久化到数据库中的一个过程称为持久化。hibernate就是用于进行持久化的一个框架。 持久化类 一个Java对象和数据库表建立了映射关系。这个类在hibernate中就是持久化类。 持久化类 = Java类 + 映射文件 2 持久化类的编写规则   规则 原因 对持...
Hibernate使用xml配置持久化类
Hibernate通过对象关系映射,使用持久化类代替传统的sql语句对数据库进行操作(通俗说就是把数据表变成一个实体类来看待和操作)。其中,持久化类可以使用 1.配置对应的hbm.xml(关系映射配置文件)来映射持久化实体类。 2.直接在持久化实体类以注解方式配置。 前期工作: 一、导入Hibernate相关依赖包(包括本人使用的mysql驱动包和c3p0连接池依赖包): 二、创
【4】Hibernate持久化类的编写
1、什么是持久化类: 持久化类:指的是一个Java类和数据库表建立了映射关系 持久化类=Java类+映射文件 2、持久化类编写规则: (1)对持久化类提供无参数的构造方法:Hibernate的底层需要反射创建持久化类的实例。 (2)对持久化类的属性私有化,对私有属性提供公有的get和set方法。 (3)持久化类要有一个唯一标识OID与表的主键对应 (4)持久化类的属性尽量使用包装类。
Hibernate中的持久化类(po)
1.什么是持久化类:po,被持久化的实体类(pojo类),处于持久状态(连接状态)的类。 2.持久化类的三种状态:瞬时状态、持久状态、脱管状态。 瞬时状态:pojo类在使用new创建时处于瞬时状态,没有被持久化,没有和Session建立联系(或者说没有和Session建立连接)。 持久状态:pojo类已经被持久化处于持久状态,和Session存在联系,对象被存入Session缓存中,对象
hibernate持久化类和一级缓存的关系?
最近学习hibernate框架,看到hibernate对象的状态和 session的一级缓存的机制有点异曲同工之妙。rnrn[img=https://img-bbs.csdn.net/upload/201403/11/1394543526_401194.png][/img]rnrn而同时rn关于session的缓存又有下面一段话rn怎么样把数据存放到一级缓存中?rn 利用session.save/update/load/get方法都可以存放在一级缓存中rnsession.evict方法可以把一个对象从一级缓存中清空?rn 利用session.clear方法可以把session中的所有的数据清空rnrn让我实在是不得不怀疑所谓的持久化状态就是放在一级缓存中。rnrn好了问题来了,一级缓存的生命周期就是session的生命周期,当session关闭的时候,相对应的一级缓存中的数据也就消失了,那么看下面这个例子。rnrnrn @Testrn public void test()rn Session session = sessionFactory.openSession();rn// Transaction transaction = session.beginTransaction();rn // Person p1 =(Person)session.load(Person.class, 1L);rn Person p1 =(Person)session.get(Person.class, 1L);rn// transaction.commit();rn session.close();rn System.out.println(p1.getPsex());rn rn OUTPUT:nan 成功输出rn 我不禁疑惑,这个p1到底有没有放在一级缓存中?rn 如果有,session 关闭后为什么还能使用?rn 如果没有,首先确定没关闭之前是放在一级缓存中,那么关闭之后缓存消失,它跑哪里去了?rn
Hibernate自动生成持久化类和映射文件
Hibernate中根据数据库中各表,使用myEclipse的返向工程,自动生成hibernate.cfg.xml 配置文件 与person.hbm.xml映射文件和持久化类 (图文介绍)
hibernate持久化类&持久化对象(五)
一、Hibernate的持久化类 1.1 什么是持久化类 持久化类:就是一个Java类(程序员编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类。 持久化类 = JavaBean + xxx.hbm.xml 1.2 持久化类的编写规则 1. 提供一个无参数 public访问控制符的构造器 -- 底层需要进行反射. 2. 提供一个标识属性,映射数据表主键字段-
Hibernate中持久化类学习
编写规则、持久化对象的唯一标识 OID、区分自然主键和代理主键、基本数据与包装类型、User.hbm.xml 的普通属性、主键生成策略。
Hibernate持久化类编写规则
持久化类即Persistent Object,简称PO。      PO的编写规则:           1.提供无参的构造器          2. 为每一个实体字段提供对应的getter/setter方法           3.每一个实体类都需要提供一个标识属性,让它与数据库中的主键对应,我们管这个属性叫OID。           4.实体类字段均使用包装类型         
Hibernate使用注解配置持久化类
接上篇文章,给出Hibernate注解配置持久化类的步骤: 一、同样配置Hibernate.cfg.xml: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibe
hibernate持久化类的编写规则
持久化类的概述 什么是持久化类 持久化:将内存中的一个对象持久化到数据库中的过程。hibernate框架就是用来进行持久化的框架。 持久化类:一个Java对象与数据库的表建立映射关系,那么这个类在hibernate中就可以称之为持久化类。 持久化类 = Java类 + 映射文件 持久化类的编写规则 持久化类的编写规则 对持久化...
Hibernate -- 持久化类的编写原则
什么是持久化类: Hibernate 是持久层的 ORM 映射框架,专注于数据的持久化工作。所谓持久化,就是将内存中的数据永久存储到关系数据库中。那么知道了什么是持久化,什么又是持久化类呢?其实所谓的持久化类指的是一个 Java 类与数据库表建立了映射关系,那么这个类称为持久化类。其实你可以简单的理解为持久话类就是一个 Java 类有了一个映射文件与数据库的表建立了关系。 持久化类的编写规...
Hibernate 持久化类,更新同步问题
我在用Hibernate 做更新操作时想到一个这样的问题. 假如我要更新一个表,更新的数据来自一个ActionForm,这时我通过org.apache.commons.beanutils.BeanUtils.populate(custom,org.apache.commons.beanutils.BeanUtils.describe(ActionForm));rn得到一个新的custom 持久化类,表面看起来,我马上就可以把这个对像往数据库里插了,其实不然,如果我在页面上有没完全的把表的数据反回到页面上对用户改的话,那我得到的 custom 对像中对应的属性就是空的,这时我往数据库插入时,这个字段的值就丢失了.rn我现在就是想到得一个通用的方法,同步这二个对像,意思就是,如果同一个属性的值相同,就不改变值,如不同,就用新的值.rn或者那位给我一个好方案也行
一个hibernate持久化类的反编译问题?
大家好,我用jad反编译持久化类xxxx.class得到如下面这样代码,其中生成了了大量的cglib代码,如:$CGLIB_READ_WRITE_CALLBACK等,我想它的源代码应该不是POJO的JavaBean形式,那它的源代码是怎样写的呀?请你们帮忙呀!rnrnimport java.io.Serializable;rnimport java.util.ArrayList;rnimport java.util.List;rnimport net.sf.cglib.transform.impl.InterceptFieldCallback;rnimport net.sf.cglib.transform.impl.InterceptFieldEnabled;rnrnpublic class xxxxrn implements Serializable, InterceptFieldEnabledrnrnrn public InterceptFieldCallback getInterceptFieldCallback()rn rn return $CGLIB_READ_WRITE_CALLBACK;rn rnrn public void setInterceptFieldCallback(InterceptFieldCallback interceptfieldcallback)rn rn $CGLIB_READ_WRITE_CALLBACK = interceptfieldcallback;rn rnrn public String $cglib_read_id()rn rn id;rn if(getInterceptFieldCallback() != null) goto _L2; else goto _L1rn_L1:rn return;rn_L2:rn String s;rn s;rn return (String)getInterceptFieldCallback().readObject(this, "id", s);rn rnrn public void $cglib_write_id(String s)rn rn id = getInterceptFieldCallback() == null ? s : (String)getInterceptFieldCallback().writeObject(this, "id", id, s);rn rn......rn
hibernate持久化问题
部分代码:@Entityrnpublic class Finance rn@OneToMany @JoinColumn(name="financeNo")rn public List getFinanceDetail() rn return FinanceDetail;rn rnrnrn这是个单项的onetomany,我试图通过保存one的一方即finance,从而级联自动保存 List rnList detail=new ArrayList();rn FinanceDetail d=new FinanceDetail();rn d.setMoney(780.2);rn d.setRemark("出行");rn detail.add(d);rn rn Finance data=new Finance(1,new Date(),9,detail);rn data.setFinanceDetail(detail);//在这里设置了关系rn报错,Could not synchronize database state with sessionrnorg.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: name.zhlei.entity.FinanceDetailrn如果我把保存Finance和保存List放在两个事物中可能就没有这个错误了,但是这样的话有太麻烦了。rn请问大侠们有什么办法,解决我现在的问题,即在一个事物中,在单项关联中,保存one的一方,自动保存many的一方。
Hibernate持久化图片问题
File file = new File("F:\\test.jpg");rn fis = new FileInputStream(file);rn byte[] bf = new byte[(int) file.length()]; rn String name = file.getName();rn //为对象的属性赋值rn TestFile testFile = new TestFile();rn testFile.setName(name);//文件名rn testFile.setFile(bf);//保存图片的二进制数组 rn session = HibernateUtil.getSessionFactory().openSession();rn rn tx = session.beginTransaction();rn session.save(testFile);rn tx.commit();rnrn这是映射文件里的配置rnTestFile类的属性:private Integer id;rn private String name;rn private byte[] file;rnrn不知道是哪里的问题,我每次运行都报错:rn org.hibernate.exception.DataException: could not insert: [com.aaa.photoTest.TestFile],这是什么原因?
关于hibernate持久化的问题
我在程序里写了这样一段:rnSampleGroup targetGroup = (SampleGroup) session.load(SampleGroup.class, new Integer(targetGroupId)); rntargetGroup.setSampleIds(sampleid1); rnsession.update(targetGroup);rnrnSampleGroup sourceGroup = (SampleGroup) session.load(SampleGroup.class, new Integer(sourceGroupId));rnsourceGroup.setSampleIds(sampleid2); rnsession.update(sourceGroup);rnrn结果数据库里的数据发生错误targetGroup对应的记录是正确的,但sourceGroup对应的记录的SampleIds字段是sampleid1不是sampleid2rnrnrn如果将这段程序改为:rnSampleGroup targetGroup = (SampleGroup) session.load(SampleGroup.class, new Integer(targetGroupId)); rntargetGroup.setSampleIds(sampleid1); rnsession.flush();rnrnSampleGroup sourceGroup = (SampleGroup) session.load(SampleGroup.class, new Integer(sourceGroupId));rnsourceGroup.setSampleIds(sampleid2); rnsession.flush();rnrn就是正确的了,哪个高手能告诉我为什麽?谢谢
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法