将NativeQuery映射到实体
问题描述:
我无法尝试使用JPA映射原生SQL查询,并将Hibernate作为提供者进行映射。这是我使用用于此目的的实体代码:将NativeQuery映射到实体
package com.prueba.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.FieldResult;
import javax.persistence.Id;
import javax.persistence.NamedNativeQuery;
import javax.persistence.SqlResultSetMapping;
@Entity
@SqlResultSetMapping(name="CustomerOrderInfo",[email protected](entityClass=com.prueba.entities.JoinEntity.class,
fields={@FieldResult(name="id",column="id"),@FieldResult(name="title",column="title"),
@FieldResult(name="firstName",column="firstName"),@FieldResult(name="lastName",column="lastName"),
@FieldResult(name="orderId",column="oderId"),@FieldResult(name="shipping",column="shipping")}))
@NamedNativeQuery(name="CustomerOrderInfoJoin",query="SELECT c.customer_id as id,c.title as title ,c.fname as firstName,c.lname as lastName,"+
"o.orderinfo_id as orderId,"+
"o.shipping as shipping FROM customer c,orderinfo o WHERE"+
"c.customer_id=o.customer_id")
public class JoinEntity {
@Id
private Integer id;
@Column
private String title;
@Column
private String firstName;
@Column
private String lastName;
@Column
private Integer orderId;
@Column
private Double shipping;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public Double getShipping() {
return shipping;
}
public void setShipping(Double shipping) {
this.shipping = shipping;
}
}
当我尝试AS 5.1部署使用JBoss这个实体,我得到以下异常:
DEPLOYMENTS IN ERROR:
Deployment "<UNKNOWN jboss.j2ee:jar=Prueba.jar,name=CustomerSessionImpl,service=EJB3>" is in error due to the following reason(s): ** UNRESOLVED Demands 'persistence.unit:unitName=#pruebaPU' **
Deployment "persistence.unit:unitName=#pruebaPU" is in error due to the following reason(s): org.hibernate.cfg.NotYetImplementedException: Pure native scalar queries are not yet supported
Deployment "<UNKNOWN jboss.j2ee:jar=Prueba.jar,name=OrderInfoSessionImpl,service=EJB3>" is in error due to the following reason(s): ** UNRESOLVED Demands 'persistence.unit:unitName=#pruebaPU' **
我真的不明白这个异常是什么意思,并且我想要修改为了让Native sql映射到我的实体中?非常感谢。
答
尝试使用小步骤,先获取@SqlResultSetMapping权限,然后在常规java类中执行@NamedNativeQuery部分或使用createNativeQuery。
答
我想你需要告诉你的NamedNativeQuery它应该使用SqlResultSetMapping。你可以用以下方法做到这一点:
@NamedNativeQuery(name="CustomerOrderInfoJoin",query="SELECT c.customer_id as id,c.title as title ,c.fname as firstName,c.lname as lastName,"+
"o.orderinfo_id as orderId,"+
"o.shipping as shipping FROM customer c,orderinfo o WHERE"+
"c.customer_id=o.customer_id",
resultSetMapping = "CustomerOrderInfo") <--- Like this
如果你可以发布定义persistence-unit&session bean实现的xml,其中entityManager使用该单元。 – 2010-08-10 18:35:38