Hibernate3.3有一个n+1选择问题。为了简单起见,我将只做一个简短的抽象示例。假设我们有以下简单类:classMainEntity{@IdpublicLongid;//wehaveatablegeneratorcreatethisid@OneToOne(mappedBy="main")publicSubEntitysubEntity;}classSubEntity{@Id@Column(name="mainId")//notethatthisisthesamecolumnasthejoincolumnbelowpublicLongmainId;//inordertohavet
我正在尝试在hibernate状态下执行查询,如下面的sql查询:SELECTphone.*FROMphoneWHEREphone.idNOTIN(SELECTphone_idFROMuser_phone)我有以下实体类:@EntityclassUser{@IdprivateIntegerid;@ManyToManyprivateSetphoneList;}和Phone类:@EntityclassPhone{@IdprivateIntegerid;privateStringdescription;}Hibernate自动创建一个名为user_phone的联结表。现在我想选择所有未被任何
我有一个名为Person的表,我已经将其映射到hibernate状态中,我已经有一些我不想丢失的数据。我需要添加名为地址的新列,知道如何在hibernate中执行此操作吗?提前致谢.. 最佳答案 如果您当前的表是由Hibernate生成的,您可以简单地在address列的java实体类中添加address属性。然后设置hibernate.hbm2ddl.auto属性为update,hibernate会在下次构建SessionFactory时自动创建这一列。当hibernate.hbm2ddl.auto为update时,Hiberna
我在SpringDefaultMessageLisenerContainer的监听器中使用Hibernate。当我让监听器以多线程运行时,我经常遇到这种只读操作的StaleStateException:Queryq=session.createQuery("SELECTkFROMKeywordkWHEREk.name=:name").setParameter("name",keywordName);Listkws=q.list()在q.list()处抛出异常:optimisticlockingfailed;nestedexceptionisorg.hibernate.StaleObje
我在我的数据库中处理一个相当复杂的对象图。我正在使用XStream序列化和反序列化这个工作正常的对象图。当我导入数据库中存在的对象的对象图时,它最初是transient的,因为没有ID并且hibernate对此一无所知。然后我有业务逻辑,通过确定新transient导入对象中的哪些对象映射到现有持久对象,在我的对象图的部分设置ID。然后我使用Hibernate的merge()和saveOrUpdate()。一些伪代码可以让您更好地了解我在做什么:ComplexObjecttransObj=xstream.import("object.xml");ComplexObjectpersist
我使用Hibernate(4.2)作为我的持久性提供者,并且我有一个包含Date字段的JPA实体:@Entity@Table(name="MY_TABLE")publicclassMyTableimplementsSerializable{...@Temporal(TemporalType.TIMESTAMP)@Column(name="START_DATE")privateDatestartDate;publicDategetStartDate(){returnstartDate;}publicvoidsetStartDate(DatestartDate){this.startDat
我想知道采取哪种方法来防止Hibernate4.3.4(使用Spring和HibernateVaidator)刷新脏实体。在我的代码中,我使用HibernateValidator的手动实现(实例本身中的.validate()方法),它在保存实体之前被调用。validate()方法返回错误列表(如果发现任何错误),否则调用Session.update()来存储实体,然后提交事务。这可行,但是当实例本身被操作时(在实体中设置发布/请求参数)实体和相应的Hibernatesession被标记为“脏”并且实体与下一个Session.flush()一起存储。在我的例子中,我想明确控制可能存储的实
我有一个bean,我在其中为每个字段定义了多个验证注释,例如@NotEmpty@Pattern(regexp="(\\-?\\d)+")@Min(value=1)StringmyField;我遇到了两个一个我无法用任何简单方法解决的问题。每个字段的指定注释的验证顺序是随机的,即不会按照注释定义的顺序发生。我相信@GroupSequence不会有帮助,因为它只定义组验证序列,而不是注释序列。正如@Tom正确评论的那样,违规被报告为Set,这意味着注释的执行顺序与报告的违规之间没有1:1的映射。我只想使每个字段的一个规则无效,即如果它不匹配模式,请不要尝试检查该值是否>=1。目前,如果将m
对于使用不区分大小写的数据库模式的JPA实体模型,当我使用@IdClass注释时,我始终会收到“实例标识符已更改”异常。对于主键为'string'的对象,当数据库中存在一个大小写的字符串,并使用相同的字符串进行查询,仅大小写不同时,就会出现错误。我看过其他SO答案,它们的形式是:a)不要修改主键(我没有)和b)你的equals()/hashCode()实现有缺陷。对于“b”,我尝试使用toLowerCase()和equalsIgnoringCase()但无济于事。[此外,Hibernate代码似乎是直接设置属性,而不是在发生“改变”时调用属性setter。]具体错误如下:Causedb
考虑这个场景:我已经通过hibernate加载了父实体Parent包含一个Children的集合,该集合很大且延迟加载当用户查看父数据时,初始加载后hibernatesession关闭用户可以选择查看lazyChildrenCollection的内容我现在想加载那个集合加载此集合的方式/最佳方式是什么?假设session-in-view不是一个选项,因为只有在用户查看了Parent并决定查看Children之后才会获取Children集合。这是一项可通过基于Web和桌面的客户端远程访问的服务。谢谢。 最佳答案 惰性集合可以使用Hib