【发布时间】:2016-09-15 12:44:37
【问题描述】:
我有一个模型如下的项目(伪代码):
class Transaction{
@OneToMany(mappedBy="transaction", fetch = FetchType.LAZY)
private Set<TransactionVersion> transactionVersions;
}
class TransactionVersion{
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="ID_TRANSACTION_VERSION")
private Transaction transaction;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="ID_CLIENT_VERSION")
private ClientVersion clientVersion;
}
class ClientVersion{
@OneToMany(mappedBy="clientVersion",fetch=FetchType.Lazy)
private Set<TransactionVersion> transactionVersions;
@OneToMany(mappedBy="client", fetch=FetchType.LAZY)
private Set<Client> clients;
}
现在,如果我尝试得到这样的东西(get(0) 只是一个例子):
transaction.getTransactionVersions().get(0)
.getClientVersion().getClients()
我得到 LazyInitializationException failed to lazily initialize a collection of role: ClientVersion.clients, no session or session was closed
如果我将 ClientVersion 和 Client 之间关系的 FetchType 更改为 EAGER,它可以工作,但我当然更喜欢延迟加载。
我知道如果我可以访问休眠会话,我可以手动初始化集合,但是有没有办法映射它以便休眠可以自己完成?当我想获取一些相关对象时,我不想使用我的自定义方法。
【问题讨论】:
标签: java hibernate jpa exception lazy-initialization