gpt4 book ai didi

Java:如何将 Hibernate 命名 SQL 查询(在 XML 文件中)的结果映射到带注释的实体

转载 作者:行者123 更新时间:2023-11-29 08:54:29 25 4
gpt4 key购买 nike

我正在尝试将 Hibernate 命名 SQL 查询(存储在 XML 文件中)的结果映射到带注释的实体对象。我已经阅读了无数的文档和教程以及支持线程,但我似乎仍然无法让它正常工作。

这是我到目前为止所得到的......

在我的 persistence.xml 文件中,我声明了一个名为 test.xml 的映射文件,并且在 test.xml 中我'我有以下内容:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<sql-query name="Asset.Test">
<![CDATA[ SELECT a.id, a.name FROM assets a WHERE a.id = 1 ]]>
</sql-query>

</hibernate-mapping>

这适用于在通用对象中检索结果,使用以下代码:

Object entity = session.getNamedQuery("Asset.Test").list().get(0);

但是当我尝试将这些结果映射到带注释的 Entity 对象时,我不断收到异常 Caused by: org.hibernate.HibernateException: Errors in named queries: Asset.Test

这是我的实体:

import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
import java.math.BigInteger;

@Entity
public class AssetTestEntity implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private BigInteger id;
private String name;

public BigInteger getId() {
return id;
}

public void setId(BigInteger id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

这是我修改过的命名查询:

<sql-query name="Asset.Test">
<return alias="assets" class="AssetTestEntity" />
<![CDATA[ SELECT assets.id AS {assets.id}, assets.name AS {assets.name} FROM assets WHERE assets.id = 1 ]]>
</sql-query>

我已经尝试了几种变体,有和没有花括号,使用不同的别名等。

我有 RTFM,包括:http://docs.jboss.org/hibernate/stable/core.old/reference/en/html/querysql-namedqueries.html

我见过很多这样的例子:http://examples.javacodegeeks.com/enterprise-java/hibernate/hibernate-named-query-example/

谁能看出我在这里做错了什么?您是否也必须在 XML 中定义实体?

提前致谢!

更新

除了拥有 Entity 对象之外,我确实通过在 XML 文件中定义 Entity 类来让它工作。工作映射 XML 如下所示:

<hibernate-mapping>

<class name="com.asset.AssetTestEntity" table="assets">
<id name="id" type="java.math.BigInteger">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" />
</property>
</class>

<sql-query name="Asset.Test">
<return alias="assets" class="com.asset.AssetTestEntity" />
<![CDATA[ SELECT a.id, a.name FROM assets a WHERE a.id = 1 ]]>
</sql-query>

</hibernate-mapping>

我希望 Hibernate 可以只使用带注释的实体而不必这样做,但显然不是。我什至尝试向实体添加 @Column 注释...

最佳答案

如果您在映射文件中的命名查询旁边定义 OR 映射,它会起作用这一事实导致一个简单的结论(对我而言):Hibernate 不知道您的 @Entity 注释类.

确保 persistence.xml lists your entity classes .

关于Java:如何将 Hibernate 命名 SQL 查询(在 XML 文件中)的结果映射到带注释的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979585/

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