我正在使用JPA persistence.xml并使用Hibernate代码生成器生成我的实体。我的persistence.xml看起来像这样:
<persistence-unit name="my_schema">
... classes ...
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://10.12.200.101:3306/my_schema"></property>
<property name="hibernate.default_catalog" value="my_schema" />
<property name="hibernate.connection.username" value="my_user"></property>
<property name="hibernate.connection.password" value="my_pass"></property>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"></property>
<property name="hibernate.connection.nombre" value="my_schema" />
</properties>
</persistence-unit>
我的所有实体默认使用FetchType.LAZY生成:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "entity_name")
默认情况下,有没有办法用FetchType.EAGER生成这个实体?
答案 0 :(得分:1)
默认情况下,所有@ManytoOne
和@OneToOne
关系均为EAGER
。
@OneToMany
关联LAZY
的理由非常充分。
假设您有一个根实体:
Country
,具有一对多关联状态State
都有一对多关联城市City
都有一对多的关联街道Street
都有一对多关联HouseNumbers
如果您有默认选项来急切地获取所有这些一对多关联,那么选择一个Country
将end up fetching the whole database。
这是一个主要的性能问题,您应该计划fetching strategy responsively。
Parent
)具有2个不相关的一对多关联(子项和作业),那么获取父实体将最终进入所有一对多关联的笛卡尔积。所以,最后: