我刚开始阅读JPA,并在hibernate中实现了解细节。但是,为了继续发展到那时,你能帮助澄清一个基本的qn。
何时使用OneToOne
如果实体管理器需要处理相关对象的持久性,我可以使用OneToOne。关键是,我总是可以在不指定oneToOne的情况下生活,但是我有责任管理关系并确保引用的对象不处于瞬态状态。这是真的?
何时使用,或不使用,ManyToOne
假设我正在定义一个Employee类,需要使用Employer定义rel。在这种情况下,我是否需要像下面那样指定manyToOne,如果不是,则需要指定
@Entity
public class Employer {
String name;
}
@Entity
class Employee {
String name;
@ManytoOne //or not??
Employer employer;
}
谢谢
1: 使用实体关系时,必须始终使用相应的注释(OneToOne,OneToMany,ManyToOne或ManyToMany)。您的选择是您是否要确保关系背后的实体本身不是瞬态的,或者指定 级联 OneToOne注释上的属性让JPA为您处理。这允许您创建一个完整的对象图并在一次调用中保留它们:
@OneToOne(cascade = CascadeType.ALL)
private MyType myType;
2: 是的,雇主 - 雇员关系听起来像OneToMany关系,雇员 - 雇主关系将是ManyToOne。如果您想要两个方向,那就称为双向关系。看看吧 Java EE教程中的相关部分 详情。
该 Java EE教程中的JPA部分 从一开始就是一个很好的参考。
何时使用OneToOne
如果实体管理器需要处理相关对象的持久性,我可以使用OneToOne。关键是,我总是可以在不指定oneToOne的情况下生活,但是我有责任管理关系并确保引用的对象不处于瞬态状态。这是真的?
如果您不希望实体管理器处理操作,则无需标记关系。您可以将相关实体作为临时字段并手动保留相关实体。但在这种情况下,您将不会使用JPA提供的整个功能列表。
通过标记关系,EntityManager了解数据库结构。如果你想利用JPA的力量,这是必不可少的。
Eg: class Car
{
@OneToOne
Warehouse warehouse;
//other fields
}
这里
除了这些,在使用JPQL时,
你可以穿越仓库
如在
em.createQuery("select c.warehouse from Car c");
除非你标记这种关系,否则这些都行不通。