java - OneToOne 和 OneToMany 是否需要在 Hibernate 的两侧进行映射?

标签 java hibernate jpa persistence

如果我有一个简单的 Person 类:

public class Person {
    @OneToOne
    private Address address;

    @OneToMany
    private List<Car> cars;
}

AddressCar 是否需要有一个 Person 字段?大多数教程都是这样显示的,即存在双向通信。

但在我的例子中,我只需要一个人的地址和汽车,而不需要地址或汽车中的人。

您将如何在 Hibernate 中映射它?谁应该对 mappedBy 负责?

最佳答案

单向@OneToOne 主键关联:

@Entity  
@Table(name="person")  
public class person{  

@Id  
@Column(name="person_id") 
@GeneratedValue     
private Integer personId;  

private String name;  

@OneToOne(cascade=CascadeType.ALL)  
@PrimaryKeyJoinColumn 
private address address;

//getters & setters

}  

@Entity  
@Table(name="address")  
public class address{  

@Id  
@Column(name="address_id")    
private Integer addressId;  

private String street;  

//getters & setters

} 

单向@OneToMany 主键关联:

@Entity  
@Table(name="person")  
public class person{  

@Id  
@Column(name="person_id") 
@GeneratedValue     
private Integer personId;  

private String name;  

@OneToOne(cascade=CascadeType.ALL)  
@PrimaryKeyJoinColumn 
private address address;

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "person_id")
private List<car> cars;


//getters & setters

}  

更新

您应该很清楚,一个实体如何在一列中保留这么多 ID?

请始终记住,许多方面将有单个对象作为外键,而一侧将有列表来保存子对象。

所以你有两个选择: 1)使用特定的表来存储您的一个和多个实体之间的关系。像这样:

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "person_id")
private List<car> cars;

http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch07.html#collections-mapping

2) 你也可以说 Many cars belongs to One person 所以在 car 类中我们也这样写:

@ManyToOne
private person person;

http://deepeshdarshan.wordpress.com/2012/11/29/hibernate-many-to-one-unidirectional-mapping-using-annotation/

此信息用于一对多和多对一的单向映射。

关于java - OneToOne 和 OneToMany 是否需要在 Hibernate 的两侧进行映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661182/

相关文章:

hibernate - Grails 查询条件为 : how to get back a map with column?

java - 为什么不注入(inject) EntityManager?

更改操作系统时间时 sleep() 中的 Java 错误 : any workaround?

java - 从 Hibernate persistenceContext 缓存中排除 JPA 实体?

java - 在 Java 中使用 System.currentTimeMillis() 计算运行时间

java - 我的公式注释中的表不存在错误

java - JPA 复合外主键

mysql - Hibernate数据访问上的JDBC异常:SQL的SQLException [n/a]; SQL状态[HY000];错误代码[1366]

java - 使用 Java 运行时执行命令

java - 如何将现有的 Java 项目添加到 Git 存储库