Tag: jpa

JPA的hashCode()/ equals()两难

在这里有一些关于JPA实体的讨论 ,并且应该为JPA实体类使用hashCode() / equals()实现。 大多数(如果不是全部的话)依赖于Hibernate,但是我想讨论它们JPA-implementation-neutrally(顺便说一句,我使用的是EclipseLink)。 所有可能的实现都有自己的优点和缺点 : hashCode() / equals()合同一致性 (不变性) List / Set操作 是否可以检测到相同的对象(例如来自不同会话,来自懒惰加载的数据结构的dynamic代理) 实体是否以分离(或非持久)状态正确运行 据我所知,有三种select : 不要超越他们; 依靠Object.equals()和Object.hashCode() hashCode() / equals()工作 不能识别相同的对象,dynamic代理的问题 没有问题与分离的实体 根据主键覆盖它们 hashCode() / equals()被破坏 正确的身份(所有被pipe理的实体) 与分离的实体有关的问题 根据Business-Id (非主键字段;外键?)覆盖它们 hashCode() / equals()被破坏 正确的身份(所有被pipe理的实体) 没有问题与分离的实体 我的问题是: 我错过了一个选项和/或亲/点? 你select了什么选项,为什么? 更新1: 通过“ hashCode() / equals()被破坏”,我的意思是说,连续的hashCode()调用可能返回不同的值,这是(当正确实现的时候)不会在Object API文档的意义上被破坏,从Map , Set或其他基于散列的Collection检索已更改的实体。 因此,在某些情况下,JPA实现(至lessEclipseLink)将无法正常工作。 更新2: 谢谢你的回答 – 他们中的大多数都有非凡的品质。 不幸的是,我仍然不确定哪种方法对于实际应用程序是最好的,或者如何确定我的应用程序的最佳方法。 […]

javax.persistence.Table.indexes()中的NoSuchMethodError [Ljavax / persistence / Index

我有一个Play Framework应用程序,我正在使用Hibernate 4.2.5.Final(通过Maven依赖pipe理器检索)。 我决定升级到Hibernate 4.3.0.Final,成功重新编译我的应用程序,并运行它。 我得到了下面的例外,并没有能够找出原因。 我降级到4.2.5,这个问题没有发生。 然后,我尝试在4.2.5之后的每个最终版本上升级Hibernate。 也就是我从4.2.5.Final到4.2.6.Final,到4.2.7.Final,到4.2.8。最后到4.3,最后。 直到我升级到4.3.0.Final,问题不会发生。 Java版本信息 java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) 和例外 : play.api.UnexpectedException: Unexpected exception[NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:152) ~[play_2.10.jar:2.2.1] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1] at scala.Option.map(Option.scala:145) ~[scala-library.jar:na] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:110) ~[play_2.10.jar:2.2.1] at scala.util.Success.flatMap(Try.scala:200) ~[scala-library.jar:na] Caused by: […]

使用JPA / Hibernate计算属性

我的Java bean有一个childCount属性。 此属性未映射到数据库列 。 相反,它应该由数据库用在我的Java bean及其子节点上运行的COUNT()函数进行计算 。 如果这个属性可以按需求/“懒惰地”计算,那就更好了,但这不是强制性的。 在最坏的情况下,我可以用HQL或Criteria API来设置这个bean的属性,但是我不想这样做。 Hibernate @Formula注释可能有帮助,但我几乎找不到任何文档。 任何帮助不胜感激。 谢谢。

JPA和Hibernate有什么区别?

我知道JPA 2是一个规范,Hibernate是一个ORM的工具。 另外,我明白Hibernate比JPA 2有更多的function。但是从实际的angular度来看,真正的区别是什么? 我有使用iBatis的经验,现在我试图学习Hibernate或JPA2。 我拿起了专业JPA2书,它一直提到“JPA提供者”。 例如: 如果您认为某项function应该标准化,那么您应该向JPA提供商说出要求 这使我困惑,所以我有几个问题: 单独使用JPA2可以通过简单地注释我的POJO来从DB获取数据 JPA2是否应该与“JPA Provider”(例如TopLink或Hibernate)一起使用? 如果是这样的话,与单独使用Hibernate相比,使用JPA2 + Hibernate有什么好处? 你能推荐一本好实用的JPA2书吗? “Pro JPA2”看起来更像是一本关于JPA2的圣经和参考书(直到后半部分才进入查询)。 是否有一本书对JPA2采取问题/解决scheme?

为什么在视图中的Hibernate开放会议被认为是一个不好的做法?

你用什么样的替代策略来避免LazyLoadExceptions? 我明白,公开会议有问题: 分层的应用程序运行在不同的jvm中 事务只在最后被提交,而且很可能你会喜欢之前的结果。 但是,如果您知道您的应用程序正在单个虚拟机上运行,​​那么为什么不通过在视图策略中使用公开会话来缓解您的痛苦呢?

Java Persistence API中的FetchType LAZY和EAGER的区别?

我是Java持久性API和Hibernate的新手。 Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别?

hibernate不能同时取多个行李

Hibernate在SessionFactory创build期间抛出这个exception: org.hibernate.loader.MultipleBagFetchException:不能同时获取多个包 这是我的testing用例: Parent.java @Entity public Parent { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy="parent", fetch=FetchType.EAGER) // @IndexColumn(name="INDEX_COL") if I had this the problem solve but I retrieve more children than I have, one child is null. private List<Child> children; } Child.java @Entity public Child { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @ManyToOne private Parent parent; } […]

做一对一关系懒

在这个应用程序中,我们正在开发,我们注意到一个看法特别慢。 我对该视图进行了剖析,并注意到有一个由hibernate执行的查询,即使数据库中只有两个对象要获取,也需要10秒。 所有OneToMany和ManyToMany关系都是懒惰的,所以这不是问题。 在检查正在执行的实际SQL时,我注意到查询中有超过80个连接。 进一步检查问题,我注意到问题是由OneToOne和ManyToOne实体类之间的深层次关系造成的。 所以,我想,我只是让他们偷懒,这应该解决问题。 但注释@OneToOne(fetch=FetchType.LAZY)或@ManyToOne(fetch=FetchType.LAZY)似乎不工作。 要么我得到一个exception,或者他们实际上并没有被代理对象取代,因此懒惰。 任何想法,我将如何得到这个工作? 请注意,我不使用persistence.xml来定义关系或configuration细节,一切都在java代码中完成。

JPA JoinColumn vs mappedBy

有什么区别: @Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; … } 和 @Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; … }

JPA EntityManager:为什么使用persist()over merge()?

EntityManager.merge()可以插入新的对象并更新现有的对象。 为什么要使用persist() (只能创build新的对象)?