0

Oracle 11G データベースに対して JBoss 7 で Hibernate 4.0 を使用しています。Java pojo クラスには、(他のプロパティに加えて) これら 2 つのプロパティがあります。SalesPerson クラスには、SalesOrder テーブルに保持される複合キーである SalesPersonId があることに注意してください。

public class SalesOrder extends OurBaseClass<SalesOrder>{
    private SalesPersonId salesPersonId;
    private SalesPerson salesPerson;

    @Embedded
    @AttributeOverride(name = "location", column = @Column(name = "sale_person_loc"))
    @XmlElement
    public SalesPersonId getSalesPersonId() {
       return salesPersonId;
    }
    public void setSalesPersonId(SalesPersonId salesPersonId) {
        this.salesPersonId = salesPersonId;
    }
    //The below object contains a SalesPersonId as composite primary key
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns( {
    @JoinColumn(name = "sales_person_no",  insertable = false, updatable = false),
    @JoinColumn(name = "sales_person_loc",  insertable = false, updatable = false)
    } )
    @XmlElement
    public SalesPerson getSalesPerson() {
        return salesPerson;
    }
    public void setSalesPerson(SalesPerson salesPerson) {
        this.salesPerson = salesPerson;
    }
}

休止状態の基準コードは次のとおりです。

Session session = (Session) manager.getDelegate();
Criteria criteria = session
    .createCriteria(SalesOrder.class,"so")
    .createAlias("salesPerson", "salesperson",JoinType.LEFT_OUTER_JOIN)
    .setMaxResults(100)
    .addOrder(Order.asc("id"));

休止状態によって生成された sql は次のとおりです。

select * from ( select this_.sales_person_no as sales_person4_641_2_,
            this_.sales_person_loc as sales_person5_641_2_, 
            this_.SALES_PERSON_NO as SALES_PERSON4_641_2_
            from SALES_ORDER this_, sales_person sales_person2_
            where this_.sales_person_no=sales_person2_.sales_person_no(+) and
            this_.sales_person_loc=sales_person2_.loc(+) 
order by this_.order_no asc ) where rownum <= ?

返されるエラーは、休止状態によって生成された重複する列名が原因です。このエラーについて何かできることはありますか? pojo から SalesPersonId を削除してもエラーは発生しませんが、クラスには SalesPerson と SalesPersonId の両方が必要であると言われました。setMaxResults を削除してもエラーが発生しないこともわかっていますが、それはオプションではありません。助けてくれてありがとう。

4

1 に答える 1

0

私はこれを理解しました。この問題は私を助けました: @AttributeOverride はどういう意味ですか?

何らかの理由で、埋め込まれた ID の複合キーの属性の 1 つだけがオーバーライドされました。そのため、場所のオーバーライドに顧客属性のオーバーライドを追加し、この問題を処理しました。

于 2013-04-07T14:35:43.967 に答える