Java @多通(fetch=FetchType.LAZY,可选=false)仍在抓取
我有一个Java @多通(fetch=FetchType.LAZY,可选=false)仍在抓取,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个@可嵌入的类: @Embeddable @Table(name="MY_TABLE") public class MyTable { @ManyToOne(fetch=FetchType.LAZY, optional=false) @JoinColumn(name="my_other_id") private MyOtherEntity myOtherEntity; ... } @Entity @Table(name="MY_OTHER_TABLE")
@可嵌入的类:
@Embeddable
@Table(name="MY_TABLE")
public class MyTable {
@ManyToOne(fetch=FetchType.LAZY, optional=false)
@JoinColumn(name="my_other_id")
private MyOtherEntity myOtherEntity;
...
}
@Entity
@Table(name="MY_OTHER_TABLE")
@DiscriminatorColumn(name="DISC", discriminatorType=DiscriminatorType.STRING)
public abstract class MyOtherEntity {
...
}
@Entity
@DiscriminatorValue("A")
public class MyOtherEntityA extends MyOtherEntity {
...
}
@Entity
@DiscriminatorValue("B")
public class MyOtherEntityB extends MyOtherEntity {
...
}
与LAZY
fetch类型一样,我希望MyOtherEntity
只是一个代理,而不是实际初始化的类。但是,当MyTable
的所有者类调用getMyTable()
时,Hibernate仍然会发出一个查询来获取它的所有列(除了那些在mytherentity
中进一步标记为LAZY的列)
按照中的建议添加optional=false
,但没有帮助。而且这门课并不是如中所建议的那样是最终的。是否还有其他原因导致LAZY无法按预期工作?指定@Proxy(LAZY=true)
您是如何验证FetchType.Lazy
是否正在获取数据的?是否有可能存在某种内部实现,它要求hibernate获取另一个实体,尽管它是懒惰的?我记得我们在使用惰性抓取时遇到过类似的问题,其中属性实体的“惰性”仅在封装实体的实例中得到保证,这些实例在运行时没有引用内部惰性实体……@Embeddable@Table
…可能是我所希望和可能的,但我第一次遇到这个。。。。而且@DiscriminatorColumn
是(根据hibernate用户指南)与@heritation
相结合的。谢谢,但这没有帮助
@Proxy(lazy=true)
@Embeddable
@Table(name="MY_TABLE")