Java 级联类型:全部、合并等
我有一个person对象和一个computer对象, 此person对象有一个名为computer的字段, 一个人可以拥有一台电脑,一对一的关系Java 级联类型:全部、合并等,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个person对象和一个computer对象, 此person对象有一个名为computer的字段, 一个人可以拥有一台电脑,一对一的关系 class Person{ @OneToOne(cascade=CascadeType.ALL)//in which situations this is true? @JoinColumn(name = "computer_id",nullable=false) private Computer computer;
class Person{
@OneToOne(cascade=CascadeType.ALL)//in which situations this is true?
@JoinColumn(name = "computer_id",nullable=false)
private Computer computer;
getComputer(){...}
setComputer(Computer c){...}
@Id
private String id;
}
class Computer{
@Id
private String id;
}
让我假设我在DB上有一个计算机对象,我用load方法得到它
Computer computer=entityManager.loadById({an id});
Person p=new Person();
p.setComputer(computer);
现在,如果我想同时保存计算机和人,我应该怎么做
entityManager.persist(p);
我不能生成相同的错误,但不久前我得到了一个“分离实体传递到持久化”错误
在不重复的情况下,将所有内容保存到DB中最合适的方法是什么
你也可以建议资源(可能是一本书)了解在不同的情况下该怎么做 在您描述的情况下,您不需要任何级联,持久化用户就足够了:
- 由于计算机已使用EM加载,因此它已连接到EM。在计算机上所做的任何更改都将自动保存到数据库,而无需任何操作
- 用户是一个新实体,它还不是持久的。要使其持久化,必须调用
。此调用后,它将附加到EM,对用户所做的任何更改也将自动保存到数据库中,而无需任何操作persist
- 在使用户持久化之前,通过使用计算机调用
,使计算机持久化persist
- 注释带有cascade=PERSIST或cascade=ALL的
关联,以便在用户持久化时自动使计算机持久化。请注意,所有还包括删除。因此,如果删除用户,其计算机也将被删除person.computer
- 由于计算机已使用EM加载,因此它已连接到EM。在计算机上所做的任何更改都将自动保存到数据库,而无需任何操作
- 用户是一个新实体,它还不是持久的。要使其持久化,必须调用
。此调用后,它将附加到EM,对用户所做的任何更改也将自动保存到数据库中,而无需任何操作persist
- 在使用户持久化之前,通过使用计算机调用
,使计算机持久化persist
- 注释带有cascade=PERSIST或cascade=ALL的
关联,以便在用户持久化时自动使计算机持久化。请注意,所有还包括删除。因此,如果删除用户,其计算机也将被删除person.computer
publiccomputerfoo(){computerc=newcomputer();em.persist(c);}
在main中我调用fooComputer=foo()代码>Person=newperson();新增人员(公司);em.person代码>直到实体分离,即当围绕这些调用的事务被提交或回滚时。如果对实体进行序列化和反序列化,结果实体也会分离。非常感谢您的回复。我想问,什么时候“坚持”会出现。你说当我调用persist之后,进行更改并将其转到db,但直到什么时候?在什么之后,我的对象失去了持久性。例如,一个方法:publiccomputerfoo(){computerc=newcomputer();em.persist(c);}
在main中我调用fooComputer=foo()代码>Person=newperson();新增人员(公司);em.person代码>直到实体分离,即当围绕这些调用的事务被提交或回滚时。如果序列化和反序列化实体,则结果实体也会分离。