我遇到的问题是一对一的延迟加载在休眠中不起作用.我已经解决了,但仍然没有正确理解会发生什么.
我的代码(延迟加载在这里不起作用,当我拉人 - 地址也被提取):
@Entity
public class Person{
@Id
@SequenceGenerator(name = "person_sequence", sequenceName = "sq_person")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence")
@Column(name = "id")
private long personID;
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
private Adress address;
//.. getters, setters
}
@Entity
public class Address {
@Id
@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="person"))
private long personID;
@PrimaryKeyJoinColumn
@OneToOne
private FileInfo person;
}
Run Code Online (Sandbox Code Playgroud)
但是:如果我添加optional=falseOneToOne关系,延迟加载工作正常!
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, …Run Code Online (Sandbox Code Playgroud) 我有一个JPA(Hibernate)实体:
@Entity class Transaction {
@ManyToOne
private Room room;
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个新的时Transaction,我知道Room它应该引用的ID (但是没有Room对象).我可以Transaction用这个信息以某种方式创建和持久化,或者我真的需要:
Room room = em.find(roomId, Room.class);
em.persist(new Transaction(room, ...));
Run Code Online (Sandbox Code Playgroud)