我想运行以下代码:
public List<Tab1Attribute> Tab1loadAttribute(EntityManager em, int first, int size) throws Exception
{
List<Tab1Attribute> lstTabAttr=null;
try
{
String sql = "SELECT "
+ " ra.*, "
+ " rc.* "
+ " from RS_Tab1_Attribute ra "
+ " JOIN RS_Tab2_CHARACTERISTIC rc "
+ " on ra.item_ref = rc.item_ref "
+ " order by ra.item_ref ";
Query query = em.createNativeQuery(sql, "TAB1Attributes");
List<Object[]> lstQueryResult = query.setFirstResult(first).setMaxResults(size).getResultList();
Tab1Attribute tab1Attr = null;
Tab2Characteristic tab2Char = null;
if(lstQueryResult!=null && lstQueryResult.size() > 0)
{
lstTab1Attr = new CopyOnWriteArrayList<Tab1Attribute>();
for (Object[] obj : lstQueryResult)
{
tab1Attr = (Tab1Attribute) obj[0];
tab2Char = (Tab2Characteristic) obj[1];
tabAttr.setTab2Characteristic(tab2Char );
lstTab1Attr.add(tab1Attr );
}
}
em.clear();
}
catch (Exception e)
{
throw e;
}
return lstTab1Attr;
}
我有两个实体类Tab1Attribute(表:RS_TAB1_ATTRIBUTE)和Tab2Characteristic(表:RS_TAB2_CHARACTERISTIC)。 Tab2Characteristic是Tab1Attribute类中的实例变量(具有关系)。我想在“TAB1Attributes”中选择resultSet。 为此,我在Tab1Attribute类之上使用了以下内容。
@Entity
@Table(name = "RS_TAB1_ATTRIBUTE")
@SqlResultSetMapping(name = "TAB1Attributes", entities = {
@EntityResult(entityClass = com.entity.Tab1Attribute.class),
@EntityResult(entityClass = com.entity.Tab2Characteristic.class)})
public class Tab1Attribute implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="ITEM_REF")
private String itemRef;
/** The v pkg. */
@Transient
private Tab2Characteristic rc;
@Column(name="AC_CA_FI")
private BigDecimal acCaFi;
//other fields and getter setters
但是当我使用JPA或上面的代码运行查询时,我得到了ORA:00918,列模糊地定义了错误。如果我一次获取整个查询结果,那么使用setFirstResult(first).setMaxResults(size)它运行正常。
请帮我解决这个问题。
此致 的Sandip
答案 0 :(得分:0)
要消除您必须使用的含糊之处:
使用@FieldResult
注释。
@SqlResultSetMapping(name="RS_TAB1_ATTRIBUTE",
entities={
@EntityResult(entityClass=com.uk.tui.entity.Tab1Attribute.class, fields={
@FieldResult(name="itemRef", column="ITEM_REF_TAB1"),
@FieldResult(name="acCaFi", column="AC_CA_FI_TAB1")})
)