有User
,Person
和Employee
个实体
User
了解Person
和Employee
。
用户的hibernate配置:
...
<many-to-one name="person" class="entry.Person" column="perid" not-null="true" cascade="all"/>
<many-to-one name="employee" class="entry.Employee" column="empid" not-null="true" cascade="all"/>
...
DAO:
public List<User> getUsers() {
return getHibernateTemplate().find("from User");
}
使用getUsers()
获取用户时,Person
和Employee
数据为NULL
。
我是否错过了某些.hbm
配置,或者我应该手动向DAO
添加更多子选择?
修改
上下文:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
...
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="userDao" class="dao.UserDaoHibernate">
<property name="factory">
<ref local="sessionFactory"/>
</property>
</bean>
DAO:
private SessionFactory factory;
public void setFactory(SessionFactory factory) {
this.factory = factory;
}
@Transactional
public List<User> getUsers() {
Session s = this.factory.getCurrentSession();
...
当尝试执行No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
时,获得getCurrentSession()
答案 0 :(得分:1)
默认情况下,除非在Hibernate配置中另有指定或在代码中初始化,否则Hibernate中的关联是延迟提取的。不鼓励在配置中提取,以避免意外后果。在上面的代码中,您需要明确初始化Person
和Employee
关联。
由于您使用的是Spring,为了便于编码,您应该停止使用HibernateTemplate
(which hasn't been recommended to use for a while),然后直接转到使用Hibernate。然后,您可以对关联(或其他一些方法,如设置Hibernate.initialize
)使用FetchMode
来初始化它们。