Java 数据库延迟获取
我有一个简单的数据库单向关系:Java 数据库延迟获取,java,sql,Java,Sql,我有一个简单的数据库单向关系: public class Bill{ @ManyToOne(fetch=FetchType.LAZY) @JoinColumn( name="BILL_ACTOR" ) private fr.teamwill.cbm.model.actor.Actor actor; } 我需要得到演员的电子邮件,但当我这样做时,我得到一个关于懒惰的例外: bill.getActor().getEmail() ---> exception 请您给我sql
public class Bill{
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn( name="BILL_ACTOR" )
private fr.teamwill.cbm.model.actor.Actor actor;
}
我需要得到演员的电子邮件,但当我这样做时,我得到一个关于懒惰的例外:
bill.getActor().getEmail() ---> exception
请您给我sql requete以获得演员,我在数据库方面有点弱,以下是我想到的:
select a.email From Bill b , Actor a fetch join ?????? or inner join??
请给我请求,非常感谢您,您无法获取参与者数据,因为您已将其设置为延迟获取类型 对于您请求的查询,可以
SELECT a.email
FROM Bill b, Actor a
WHERE b.BILL_ACTOR = a.id
我很好奇为什么要为这个属性设置延迟获取类型 通常,对于重载数据,应该应用惰性模式。在您的情况下,它应该应用于
Actor
类中的bills
属性。
这里有一个例子
public class Bill {
@ManyToOne
@JoinColumn( name="BILL_ACTOR" )
private fr.teamwill.cbm.model.actor.Actor actor;
}
public class Actor {
//...
@OneToMany(fetch=FetchType.LAZY)
private List<Bill> bills
}
公共类法案{
@许多酮
@JoinColumn(name=“BILL\u ACTOR”)
私人fr.teamwill.cbm.model.actor.actor;
}
公共级演员{
//...
@OneToMany(fetch=FetchType.LAZY)
私人名单条例草案
}
您可以启用hibernate sql跟踪,并查看sql log4j.logger.org.hibernate.sql=DEBUG将启用sql跟踪。如果要获取数千个父实体实例,而实际上很少引用子实体,则将许多子实体标记为延迟获取是一种可行的策略。有人明确提到,这是单向关系。那你为什么要把账单放在演员课上呢@陈浩