[英]How to use @ConstructorResult annotation
I have some native query and want to map the result of query execution into List of NON-Entity POJO classes:我有一些本机查询,并希望将查询执行的结果映射到非实体 POJO 类列表中:
@SqlResultSetMapping(
name = "SomeMapping",
classes = {
@ConstructorResult(targetClass = SomeClass.class,
columns = {
@ColumnResult(name = "id", type = Integer.class),
@ColumnResult(name = "NAME", type = String.class),
@ColumnResult(name = "DATE_BEGIN", type = java.util.Date.class)
}
)
}
)
public class SomeClass{
private Integer id;
private String name;
private java.util.Date begDate;
private java.util.Date endDate;
public SomeClass(Integer id, String name, Date begDate){
this.id = id;
this.name = name;
this.begDate = begDate;
}
//Getters & Setters ...
}
And generally how i want to retrieve result of query execution:通常我想如何检索查询执行的结果:
String query = "SELECT " +
"A.id AS 'id', " +
"A.name AS 'NAME', " +
"A.begDate AS 'DATE_BEGIN' " +
"FROM " +
"SomeTable A " +
"WHERE A.endDate < '2014-01-01'";
List<SomeClass> result = em.createNativeQuery(query, "SomeMapping").getResultList();
But i always get the List of Object.但我总是得到对象列表。 How to retrieve list of my POJO-s?如何检索我的 POJO-s 列表?
尝试在实体上移动@SqlResultSetMapping
实体。
Cannot reproduce, but your code have some problems.无法重现,但您的代码有一些问题。
@SqlResultSetMapping
on entity classes在实体类上添加@SqlResultSetMapping
'
不要用'
引用列别名import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class SomeClass {
private int id;
private String name;
private Date dateBegin;
}
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.ColumnResult;
import javax.persistence.ConstructorResult;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.Table;
import lombok.Getter;
@SqlResultSetMapping(
name = "SomeMapping",
classes = {
@ConstructorResult(targetClass = SomeClass.class,
columns = {
@ColumnResult(name = "id", type = Integer.class),
@ColumnResult(name = "NAME", type = String.class),
@ColumnResult(name = "DATE_BEGIN", type = java.util.Date.class)
})
})
@Entity
@Table(name = "sometable")
@Getter
public class SomeEntity {
@Id
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "begdate")
private Date begDate;
@Column(name = "enddate")
private Date endDate;
}
final String query = "SELECT " +
"A.id AS id, " +
"A.name AS NAME, " +
"A.begDate AS DATE_BEGIN " +
"FROM " +
"SomeTable A " +
"WHERE A.endDate < '2014-01-01'";
final List<SomeClass> result = em.createNativeQuery(query, "SomeMapping").getResultList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.