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