我遇到的问题是一对一的延迟加载在休眠中不起作用.我已经解决了,但仍然没有正确理解会发生什么.
我的代码(延迟加载在这里不起作用,当我拉人 - 地址也被提取):
@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中,我很困惑何时使用属性optional=false和注释@Column(nullable=false).有什么不同?
我有一些麻烦要让@ManyToOne关联加载lazilly.我正在使用fetch = LAZY但是当主键列没有进行连接时它不起作用.
我知道这个问题已被提出但我认为没有得到妥善回答,因此我提供了详细信息以澄清问题.
这是我的模特:
DummyB -> DummyA
Run Code Online (Sandbox Code Playgroud)
这些是表格:
create table dummyA (
id number(18,0), --pk
name varchar2(20) -- unique field
);
create table dummyB (
id number(18,0),
dummya_id number(18,0),
dummya_name varchar2(20)
);
Run Code Online (Sandbox Code Playgroud)
这些是实体:
@Entity
public class DummyA implements Serializable {
private Long id;
private String name;
@Id
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = …Run Code Online (Sandbox Code Playgroud)