【发布时间】:2013-08-01 23:56:02
【问题描述】:
我遇到了一对一延迟加载在休眠中不起作用的问题。我已经已经解决了,但仍然不正确理解会发生什么。
我的代码(延迟加载在这里不起作用,当我拉人时 - 地址也被提取):
@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;
}
但是:如果我在 OneToOne 关系中添加 optional=false,延迟加载工作正常!
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Adress address;
问题/恳求:请解释一下optional=false注解如何帮助实现延迟加载。
PS我看过post1和post2的帖子,明白为什么简单的OneToOne不能偷懒,但我仍然无法掌握optional=false的魔法。
【问题讨论】:
-
嘿@Volodymyr,我和你有同样的问题。我正在尝试将 BLOB 列与实体分开。父实体有子实体。子实体包含二进制列。父母和孩子是
same table,所以我使用@OneToOne 关系。虽然我使用了 LAZY fetchType 但它似乎不起作用。当我输入optional=false时,它起作用了。任何解释都将不胜感激。 -
@Emerald214 抱歉,那是 2 年前的事了。目前我正在写 JS Mobile,帮不了你
-
OneToOne optional = false 不适用于 CascadeType.PERSIST,请参阅:hibernate.atlassian.net/browse/HHH-9670
标签: hibernate jpa lazy-loading one-to-one