在使用两个连接表运行JPA查询时获取ORA:00918

时间:2014-12-24 12:07:04

标签: oracle jpa

我想运行以下代码:

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

1 个答案:

答案 0 :(得分:0)

要消除您必须使用的含糊之处:

  1. 更改表1列的名称。
  2. 使用@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")}) )