gpt4 book ai didi

java - JPA 2.1 中的 @ConstructorResult 映射无法与 Hibernate 4.3.5.Final 一起正常工作

转载 作者:行者123 更新时间:2023-12-01 19:00:15 24 4
gpt4 key购买 nike

我尝试将 native 查询映射到非实体类。我有以下实体:

@Entity
@Table(name = "Groups")
@SqlResultSetMapping(name = "groupList", classes = {
@ConstructorResult(targetClass = GroupListEntry.class, columns = {
@ColumnResult(name = "id", type = Long.class),
@ColumnResult(name = "name", type = String.class),
@ColumnResult(name = "typeId", type = Long.class),
@ColumnResult(name = "lastUpdateDate", type = Date.class)
})
})
public class GroupEntity implements Serializable {
...
}

我预料到会打电话

final Query query = getEntityManager().createNativeQuery(q.toString(), "groupList");
final List<GroupListEntry> result = Collections.checkedList(query.getResultList(), GroupListEntry.class);

将导致使用以下构造函数创建 GroupListEntry 对象(如 @ColumnResult 注释中所述)

public GroupListEntry(
final Long groupId,
final String name,
final Long typeId,
final Date lastUpdateDate) {
...
}

但事实证明,预期的构造函数依赖于底层数据库......在集成测试中,我使用 HSQLDB 和 JPA/Hibernate 尝试调用:

public GroupListEntry(
final BigInteger groupId,
final String name,
final BigInteger typeId,
final Date lastUpdateDate) {
...
}

而在使用 MSSQL 的开发环境中,它调用:

public GroupListEntry(
final Integer groupId,
final String name,
final Integer typeId,
final Date lastUpdateDate) {
...
}

显然,每个@ColumnResult中指定的类型都会被忽略。我只想有一个构造函数而不是三个。

下面是我的 pom.xml 文件的片段:

    <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>

我错过了什么吗?

在执行查询后编写一些注释比手动映射要优雅得多,但我不能强制它正常工作。

问候,

中号

最佳答案

答案是您的期望是正确的,即以下内容适用于 Hibernate 4.3.5:

Apparently the specified type in each @ColumnResult is simply ignored.

有一个官方的 Hibernate 错误:HHH-8237 - Type mapping of @ColumnResult is ignored 。正如您所看到的,这个错误在 Hibernate 版本 4.3.6 中已修复。

关于java - JPA 2.1 中的 @ConstructorResult 映射无法与 Hibernate 4.3.5.Final 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761770/

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