gpt4 book ai didi

java - 如何让 Hibernate 只查询默认映射?

转载 作者:行者123 更新时间:2023-12-04 07:05:23 26 4
gpt4 key购买 nike

我有一个实体类:

卷心菜

package womble;

public class Cabbage {
private int id;
// getters, setters, etc.
}

我已经映射到两个单独的数据库表,如下所示:

卷心菜.hbm.xml
<hibernate-mapping>
<class name="womble.Cabbage"> <!-- Using the default entity and table name. -->
<id name="id" unsaved-value="null">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>

卷心菜备份.hbm.xml
<hibernate-mapping>
<class name="womble.Cabbage" entity-name="CabbageBackup" table="cabbage_backup">
<id name="id">
<generator class="assigned"/>
</id>
</class>
</hibernate-mapping>

我正在尝试像这样检索最后保存的 Cabbage 实例:

白菜道.java
package womble;

public class CabbageDao {
Session session; // Hibernate session
String GET_MAX_ID = "select max(id) from Cabbage";

public getLastCabbage() {
Object lastId = session.createQuery(GET_MAX_ID).uniqueResult();
return session.load(Cabbage.class, lastId);
}
}

这爆炸了 NonUniqueResultException :“查询没有返回唯一的结果:2”

查看日志,Hibernate 显然查询了两个表,然后将结果连接在一起。

有没有办法让 Hibernate 只查询实体的默认映射? (也就是说,当我使用简单的类名时,专门防止它神奇地查询这两个映射。)

我尝试使用上面的方法,使用标准 API 将 Cabbage.class 传递给 #createCriteria(),以及字符串“Cabbage”,两者都从两个表中选择。我试图避免为“主”映射指定实体名称,因为我的代码中有多个类似的类,我还必须修复它们之间的所有关系。

最佳答案

尝试在两个映射上使用实体名称,并指定您想要的。我相信这是那个属性的契约。

关于java - 如何让 Hibernate 只查询默认映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1188858/

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