gpt4 book ai didi

java - Hibernate 一对一 XML 映射

转载 作者:行者123 更新时间:2023-12-01 04:27:03 27 4
gpt4 key购买 nike

我找到了以下链接:

但似乎没有任何效果。

我有 2 个实体:

class User {
Integer userId;
Profile userProfile;
}

class Profile {
Integer profileId;
User user;
}

使用 XML 映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="model.User" table="User" catalog="Proj1" dynamic-update="true">
<id name="userId" type="java.lang.Integer">
<column name="userId" />
<generator class="identity" />
</id>
<one-to-one name="userProfile" class="model.Profile">
</one-to-one>
</class>
</hibernate-mapping>

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 12, 2013 7:51:22 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="model.Profile" table="Profile" catalog="Proj1" dynamic-update="true">
<id name="profileId" type="java.lang.Integer">
<column name="profileId" />
<generator class="identity" />
</id>
<many-to-one name="user" class="model.Users" unique="true">
<column name="userId" />
</many-to-one>
</class>
</hibernate-mapping>

这里的问题是,User 必须恰好有一个 Profile,但 Profile 不一定有一个 User 因此,Profile 可能具有 null User

现在的问题是,每次我获取 User 及其关联的 Profile 时,检索到的 Profile 就是 Profile code> 的 profileIduserId 相同,也就是说,如果 UseruserId 4 则 检索到的配置文件也是profileId 4的配置文件,即使它应该检索userId 4而不是Profile profileId 4.

更新:添加 Dao 代码

public User findById( int id ) {
log.debug("getting User instance with id: " + id);
try {
Criteria userCriteria = this.sessionFactory.getCurrentSession().createCriteria(User.class);
userCriteria.add(Restrictions.idEq(id));

userCriteria.setFetchMode("userProfile", FetchMode.JOIN);

userCriteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
Users instance = (Users) userCriteria.uniqueResult();

if(instance == null)
log.debug("get successful, no instance found");
else
log.debug("get successful, instance found");
return instance;
}
catch(RuntimeException re) {
log.error("get failed", re);
throw re;
}
}

最佳答案

终于找到解决办法了。最初我必须设置 userProfile每次我需要手动获取关联的 userProfile 时的User只是为了临时解决方法。但我刚刚找到了这个链接:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/associations.html#assoc-bidirectional-121

所以基本上我只需要添加 unique="true" not-null="false"many-to-one user的在Profile xml 并添加 property-ref="user"one-to-one userProfileUser 。我认为这里的关键是 property-ref="user"

关于java - Hibernate 一对一 XML 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18413783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com