Tag: jpa

让hibernate忽略未映射的类variables

我以为hibernate只考虑用@Column注解的类variables。 但奇怪的是,今天当我添加一个variables(即没有映射到任何列,只是一个variables,我需要在类中),它试图将该variables包含在select语句中作为列名并引发错误 – “字段列表”中的未知列“team1_.agencyName” 我的课 – @Entity @Table(name="team") public class Team extends BaseObject implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(length=50) private String name; @Column(length=10) private String code; @Column(name = "agency_id") private Long agencyId; private String agencyName; //note: not annotated. } 仅供参考…我使用上面的类在另一个类与许多映射 @ManyToMany(fetch = FetchType.EAGER) @JoinTable( name="user_team", joinColumns = { @JoinColumn( name="user_id") }, inverseJoinColumns […]

在双向JPA OneToMany / ManyToOne关联中,“关联的反面”是什么意思?

在TopLink JPA注释参考的这些例子中: 示例1-59 @OneToMany – 具有generics的客户类 @Entity public class Customer implements Serializable { … @OneToMany(cascade=ALL, mappedBy="customer") public Set<Order> getOrders() { return orders; } … } 示例1-60 @ManyToOne – 带generics的订单类 @Entity public class Order implements Serializable { … @ManyToOne @JoinColumn(name="CUST_ID", nullable=false) public Customer getCustomer() { return customer; } … } 在我看来, Customer实体是协会的所有者。 但是,在同一个文档的mappedBy属性的解释中,写道: 如果关系是双向的,则将关联的反向(非拥有)一侧上的mappedBy元素设置为拥有该关系的字段或属性的名称,如示例1-60所示。 但是,如果我没有错,看起来就像在这个例子中, mappedBy实际上是在关联的拥有者一方指定的,而不是非拥有者一方。 […]

使用固定值在JPA映射枚举?

我正在寻找使用JPA映射枚举的不同方法。 我特别想设置每个枚举项的整数值并只保存整数值。 @Entity @Table(name = "AUTHORITY_") public class Authority implements Serializable { public enum Right { READ(100), WRITE(200), EDITOR (300); private int value; Right(int value) { this.value = value; } public int getValue() { return value; } }; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "AUTHORITY_ID") private Long id; // the enum to map : private […]

hibernate与JPA与JDO – 每个的利弊?

我熟悉ORM作为一个概念,几年前我甚至使用nHibernate来开发一个.NET项目。 但是,我没有跟上Java的ORM主题,并没有机会使用任何这些工具。 但是,现在我可能有机会开始为我们的应用程序使用一些ORM工具,试图摆脱一系列传统的Web服务。 我很难说出JPA规范,Hibernate库本身和JDO提供的内容之间的区别。 所以,我明白这个问题有点开放,但是我希望能得到一些意见: 各有什么优点和缺点? 你会build议一个新的项目? 是否有一定的条件,使用一个框架与另一个框架是有意义的?

Hibernate SessionFactory与EntityManagerFactory

我是Hibernate的新手,并不清楚是使用SessionFactory还是EntityManagerFactory来获取hibernate会话。 两者有什么区别? 优点缺点?

Spring Data JPA中的CrudRepository和JpaRepository接口有什么区别?

Spring Data JPA中的CrudRepository和JpaRepository接口有何不同,请参阅Web中的示例。 我看到他们在那里交换使用的一种。 他们有什么区别? 你为什么要用另一个呢?

创build完美的JPA实体

我一直在使用JPA(实现Hibernate)一段时间,每次我需要创build实体时,我发现自己正在与AccessType,不可变属性,equals / hashCode …等问题挣扎。 所以我决定尝试找出每个问题的一般最佳做法,并写下来供个人使用。 我不介意任何人对此发表评论,或者告诉我我错在哪里。 实体类 实现Serializable 原因: 规范说你必须,但是一些JPA提供者不执行这个。 作为JPA提供程序的Hibernate不强制执行此操作,但如果尚未实现Serializable,则它可能会在ClassCastException的深处发生故障。 构造函数 用实体的所有必填字段创build一个构造函数 原因:构造函数应该始终保持创build的实例处于正常状态。 除了这个构造函数:有一个包私有默认的构造函数 原因:默认的构造函数需要Hibernate初始化实体; 私有是允许的,但包私有(或公共)可见性是需要的运行时代理生成和有效的数据检索没有字节码工具。 字段/属性 一般情况下使用字段访问,需要时使用属性访问 理由:这可能是最值得商榷的问题,因为没有一个明确而有说服力的论据(财产准入和实地准入); 然而,由于代码更清晰,封装更好,并且不需要为不可变字段创buildsetter,所以字段访问似乎是最受欢迎的 省略set不可变字段(访问types字段不需要) 物业可能是私人的 原因:我曾经听说受保护对于(Hibernate)性能更好,但是我可以在网上find的是: Hibernate可以直接访问公共,私有和受保护的访问方法以及公共,私有和受保护的字段。 这个select取决于你,你可以匹配它来适应你的应用程序devise。 等于/的hashCode 如果仅在持久化实体时才设置此ID,请勿使用生成的ID 优先:使用不可变的值形成一个唯一的业务密钥,并用它来testing相等性 如果唯一的业务密钥不可用,则使用在初始化实体时创build的非暂时性UUID ; 看到这个伟大的文章更多的信息。 从不涉及相关实体(ManyToOne); 如果此实体(如父实体)需要成为业务密钥的一部分,则仅比较该ID。 只要你使用属性访问types ,在代理上调用getId()将不会触发实体的加载。 示例实体 @Entity @Table(name = "ROOM") public class Room implements Serializable { private static final long serialVersionUID = 1L; @Id […]

指定索引(非唯一键)使用JPA

如何定义一个字段,例如使用JPA注释将email定义为索引。 我们在email上需要一个非唯一的密钥,因为每天在这个字段上有几百万个查询,而且没有密钥有点慢。 @Entity @Table(name="person", uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"})) public class Person { // Unique on code and uid public String code; public String uid; public String username; public String name; public String email; } 我已经看到一个冬眠特定的注释,但我试图避免供应商的具体解决scheme,因为我们仍然决定hibernate和数据核心之间。 更新: 从JPA 2.1开始,你可以做到这一点。 请参阅: 此位置不允许使用注释@Index

JPA地图收集的枚举

在JPA中有没有办法在Entity类中映射一个Enums集合? 或者唯一的解决办法是将Enum与另一个域类打包并用它来映射集合? @Entity public class Person { public enum InterestsEnum {Books, Sport, etc… } //@??? Collection<InterestsEnum> interests; } 我正在使用Hibernate JPA实现,但当然会更喜欢实现不可知的解决scheme。

Hibernate:Where insertable = false,updatable = false属于涉及外键的复合主键星座?

在Hibernate或其他ORM中实现复合主键时,在使用标识关系的复合主键星座(FK是PK的一部分)中,最多有三处将insertable = false,updatable = false: 进入复合PK类的@Column注解(@Embeddable类)或 进入实体类的关联@ContactColumn / s注释或 进入实体类的冗余 PK属性的@Column注解(仅限于@IdClass类) 第三个是使用@IdClass和JPA 1.0 AFAIK的唯一方法。 见http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_Relationships 。 我会考虑只有案件1和2。 问:一般来说,将“insertable = false,updatable = false”放在哪个位置是最好的select? 关于这个问题,我遇到了Hibernate的问题。 例如,Hibernate 3.5.x会抱怨Zips表 CREATE TABLE Zips ( country_code CHAR(2), code VARCHAR(10), PRIMARY KEY (country_code, code), FOREIGN KEY (country_code) REFERENCES Countries (iso_code) ) 有: org.hibernate.MappingException: Repeated column in mapping for entity: com.kawoolutions.bbstats.model.Zip column: country_code […]