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 を削除してもエラーが発生しないこともわかっていますが、それはオプションではありません。助けてくれてありがとう。