@@@ ConstructorResult映射在Hibernate 4.3.5.Final中无法正常工作。

问题描述 投票:3回答:1
我尝试将本机查询映射到非实体类。我有以下实体:

@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>

我想念什么吗?

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

问候,

M

我尝试将本机查询映射到非实体类。我有以下实体:@Entity @Table(name =“ Groups”)@SqlResultSetMapping(name =“ groupList”,classes = {@ @ConstructorResult(targetClass ...

java hibernate jpa jpa-2.1
1个回答
1
投票
答案是您的期望是正确的,即以下对于Hibernate 4.3.5是正确的:
© www.soinside.com 2019 - 2024. All rights reserved.