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跟踪。如果要获取数千个父实体实例,而实际上很少引用子实体,则将许多子实体标记为延迟获取是一种可行的策略。有人明确提到,这是
单向关系。那你为什么要把账单放在演员课上呢@陈浩