Questions tagged «jpa»

Java Persistence API(JPA)是Java规范,用于访问,持久化和管理Java对象/类与关系数据库之间的数据。它是EJB 3.0规范的一部分,并且是对象到关系映射(ORM)的行业标准方法。



22
JPA和Hibernate有什么区别?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 2年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我知道JPA 2是一个规范,而Hibernate是ORM的工具。另外,我了解到Hibernate具有比JPA 2更多的功能。但是从实际的角度来看,真正的区别是什么? 我有使用iBatis的经验,现在我正在尝试学习Hibernate或JPA2。我拿起Pro JPA2书籍,并且一直指“ JPA提供者”。例如: 如果您认为某个功能应该被标准化,则应该大声疾呼并向您的JPA提供者提出要求 这使我感到困惑,所以我有几个问题: 我可以单独使用JPA2注释POJO即可从数据库中获取数据 JPA2是否应该与“ JPA Provider”一起使用,例如TopLink或Hibernate?如果是这样,那么与单独使用JPA2或单独使用Hibernate相比,使用JPA2 + Hibernate有什么好处? 您能推荐一本实用的JPA2书籍吗?“ Pro JPA2”似乎更像是一本关于JPA2的圣经和参考书(直到本书的后半部分才进入Queries)。是否有一本书针对JPA2采用问题/解决方法?
680 java  hibernate  jpa  jakarta-ee  orm 



8
使用JPA @OneToMany关联时,@ JoinColumn和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; ... }
516 java  hibernate  jpa  orm  one-to-many 

15
Hibernate引发MultipleBagFetchException-无法同时获取多个包
Hibernate在创建SessionFactory时抛出此异常: org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包 这是我的测试用例: 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; …
471 java  hibernate  jpa  one-to-many  bag 

4
创建完美的JPA实体
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我已经使用JPA(实现休眠)一段时间了,每次我需要创建实体时,我都会遇到诸如AccessType,不可变属性,equals / hashCode等问题。 因此,我决定尝试找出每个问题的最佳常规做法,并写下来供个人使用。 但是,我不介意让任何人对此发表评论或告诉我我错了。 实体类 实现可序列化 原因:规范要求您必须这样做,但是某些JPA提供程序没有强制执行此操作。作为JPA提供程序的Hibernate不会强制执行此操作,但是如果尚未实现Serializable,它可能会因ClassCastException失败而失败。 建设者 用实体的所有必填字段创建一个构造函数 原因:构造函数应始终使创建的实例保持健全状态。 除了这个构造函数:还拥有一个包私有的默认构造函数 原因:Hibernate需要默认构造函数来初始化实体;允许使用private,但是在没有字节码检测的情况下,包私有(或公共)可见性对于运行时代理生成和有效的数据检索是必需的。 字段/属性 在一般情况下使用字段访问,在需要时使用属性访问 原因:这可能是最有争议的问题,因为没有明确的,令人信服的论点(财产使用权与实地使用权);但是,由于更清晰的代码,更好的封装并且无需为不可变字段创建设置器,因此字段访问似乎是普遍喜欢的方法 省略不可变字段的设置器(访问类型字段不需要) 属性可能是私有的 原因:我曾经听说保护(Hibernate)的性能更好,但是我在网上可以找到的是:Hibernate可以直接访问公共,私有和受保护的访问器方法,以及公共,私有和受保护的字段。 。选择取决于您,您可以将其匹配以适合您的应用程序设计。 等于/哈希码 如果仅在持久化实体时设置此ID,请不要使用生成的ID 根据喜好:使用不可变值形成唯一的业务密钥,并使用它来测试是否相等 如果唯一的业务密钥不可用,则使用在初始化实体时创建的非临时UUID;有关更多信息,请参见这篇出色的文章。 从不引用相关实体(ManyToOne);如果此实体(如父实体)需要成为业务密钥的一部分,则仅比较ID。只要使用属性访问类型,在代理上调用getId()不会触发实体的加载。 实体实例 @Entity @Table(name = "ROOM") public class Room implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue @Column(name = …
422 java  hibernate  jpa  equals 

20
JPA hashCode()/ equals()困境
此处已经进行了一些 有关JPA实体的讨论,以及JPA实体类应使用哪种hashCode()/ equals()实现。它们中的大多数(如果不是全部)都依赖于Hibernate,但是我想中立地讨论它们(顺便说一下,我正在使用EclipseLink)。 在以下方面,所有可能的实现都有各自的优点和缺点: hashCode()/equals()合同一致性(不变性)为List/ Set操作 是否可以检测到相同的对象(例如,来自不同的会话,来自延迟加载的数据结构的动态代理) 实体在分离(或非持久)状态下是否行为正确 据我所知,有三种选择: 不要覆盖它们;依靠Object.equals()和Object.hashCode() hashCode()/ equals()工作 无法识别相同的对象,动态代理问题 独立实体没有问题 根据主键覆盖它们 hashCode()/ equals()坏了 正确的身份(对于所有管理实体) 独立实体的问题 根据Business-Id(非主键字段;外键如何?) 覆盖它们 hashCode()/ equals()坏了 正确的身份(对于所有管理实体) 独立实体没有问题 我的问题是: 我错过了一个选项和/或优点/缺点吗? 您选择了什么选项,为什么? 更新1: 通过“ hashCode()/ equals()被破坏”,我的意思是连续hashCode()调用可能会返回不同的值,也就是(当正确实施)不在的感觉打破ObjectAPI文档,但是当试图从检索改变实体引起的问题Map, Set或其他基于哈希Collection。因此,在某些情况下,JPA实现(至少是EclipseLink)将无法正常工作。 更新2: 谢谢您的回答-大多数都具有卓越的质量。 不幸的是,我仍然不确定哪种方法对实际应用程序将是最好的,或者不确定如何为我的应用程序确定最佳方法。因此,我将保持开放的态度,并希望有更多的讨论和/或意见。





4
困惑:使用JPA和Hibernate的@NotNull与@Column(nullable = false)
当它们出现在的字段/获取器上时,它们@Entity之间有什么区别?(我通过Hibernate保留了Entity )。 它们每个都属于什么框架和/或规范? @NotNull位于中javax.validation.constraints。在javax.validation.constraints.NotNulljavadoc中说 带注释的元素不能为空 但是它没有提到数据库中元素的表示形式,那么为什么nullable=false要在列中添加约束呢?

18
PersistentObjectException:JPA和Hibernate传递以持久保留的分离实体
我有一个JPA持久对象模型,其中包含多对一关系:一个Account具有许多Transactions。A Transaction有一个Account。 这是一段代码: @Entity public class Transaction { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne(cascade = {CascadeType.ALL},fetch= FetchType.EAGER) private Account fromAccount; .... @Entity public class Account { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(cascade = {CascadeType.ALL},fetch= FetchType.EAGER, mappedBy = "fromAccount") private Set<Transaction> transactions; 我能够创建一个Account对象,向其中添加事务,并Account正确地持久保存该对象。但是,当我创建事务时,使用现有的已经持久化的Account并持久化该Transaction,我得到一个异常: 由以下原因引起:org.hibernate.PersistentObjectException:传递给持久对象的分离实体:org.hibernate.event.internal.DefaultPersistEventListener.onPersist上的com.paulsanwald.Account(DefaultPersistEventListener.java:141) 因此,我能够保留Account包含交易的,但不能保留包含的交易Account。我以为这是因为Account可能未附加,但是此代码仍然给我同样的异常: if (account.getId()!=null) …
237 java  hibernate  jpa  entity  persist 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.