我有这样的实体:JPA,@Transient场和原生查询映射
@Entity
@Table(name = "entry")
@SqlResultSetMapping(
name = "viewEntry",
entities =
@EntityResult(entityClass = ViewEntry.class,
fields = {
@FieldResult(name="id", column = "id"),
@FieldResult(name="guid", column = "guid"),
@FieldResult(name="link", column = "link"),
@FieldResult(name="descr", column = "descr"),
@FieldResult(name="pubDate", column = "pub_date"),
@FieldResult(name="read", column = "my_read")
}
)
)
public class ViewEntry implements Serializable {
@Id
private Integer id;
private String guid;
private String link;
private String descr;
private Date pubDate;
@Transient
private Boolean read;
}
领域read
驻留在另一个表,所以我做了它短暂的,以防止JPA映射错误。要检索实体的内容我想用看起来像这样的原生查询:
select id,guid,link,descr,pub_date,feed_id,user_id,is_read as my_read from entry join user_to_entry ....
-- skipped dynamic part of query
的问题是,我不知道如何以原生查询映射到我的实体。特别是我不知道@Transient字段是否会被EntityManager忽略。请帮助。
可能是一个错字,但是您在映射中将列指定为'my_read',但在查询中它被称为'is_read'。 – 2015-04-03 09:15:37
据我所知,'column'参数是结果集中别名的名称,'name'参数是该字段的名称。纠正我,如果我错了 – 2015-04-03 09:22:41
你是对的,它只是在原来的文章没有'as my_read'。 – 2015-04-03 09:25:02