2012-05-07 94 views
2

我有表A,B,C其中B是關聯表,添加列休眠條件一對多嵌入表

| A | 1 .. * | B | * .. 1 | C |

@Embeddable 
public class BPK implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="i_a", nullable=false) 
    private A a; 

    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="i_c", nullable=false) 
    private C c; 

    // getters, setters 
} 

實體Ç

@Entity 
@Table(name = "c") 
public class C { 
    @Column(name = "i_c") 
    private Long iC; 

    @Column(name="name") 
    private String name; 

    // getters, setters 
} 
:爲B實體的列表

@Entity 
@Table(name = "a") 
public class A { 
    //id 

    @OneToMany(mappedBy="bPK.a", cascade={CascadeType.ALL}) 
    private List<B> listB; 

    // getters, setters 
} 

實體B已經嵌入了PK

@Entity 
@Table(name = "b") 
public class B { 
    @EmbeddedId 
    private BPK bPK; 

    // added columns 
    // getters, setters 
} 

嵌入式主鍵類

實體A

...我想獲得這樣的一個對象已關聯的對象C混凝土名

我試圖做這種方式,但它不工作

Criteria criteria = session.createCriteria(A.class); 
criteria.createAlias("listB", "bList") 
criteria.add(Restrictions.like("bList.bPK.c.name", "name", MatchMode.ANYWHERE)); 

我有以下異常:

org.springframework.orm.hibernate3.HibernateQueryException:無法解析屬性:bPK.c.name

謝謝大家幫忙

+0

你有沒有找到這個問題的解決方案?你剛剛使用HQL? – Curt

+0

@Curt我使用HQL。 – Daniel

+0

謝謝,這就是我最後做的...... – Curt

回答

0

你得到這個的原因是Hibernate正在尋找你的bList (A class)中的列bPk.c.name,而且顯然沒有這樣的列。你試圖達到的目標可以通過我的多個別名來完成(創建別名時,Criteria也會使用該別名在當前表上進行連接)。

這樣:

Criteria criteria = session.createCriteria(A.class); 
criteria.createAlias("listB", "bList") 
    .createAlias("bList.bPk", "bPk") 
    .createAlias("bPk.c", "c") 
    .add(Restrictions.like("c.name", "name", MatchMode.ANYWHERE)); 

我覺得MatchMode.ANYWHERE是沒有必要的。

+0

謝謝你的答覆,但它仍然無法正常工作。但現在我得到另一個異常:org.springframework.dao.InvalidDataAccessResourceUsageException:引起:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:'where子句'中的未知列'c3_.name' – Daniel

+0

你現在得到什麼? –

+0

org.springframework.dao.InvalidDataAccessResourceUsageException:引起:com.mysql.jdbc.exceptions。MySQLSyntaxErrorException:'where子句'中的未知列'c3_.name' – Daniel

0

我試圖找到一種方法,在@CollectionTable引用一個集合元素與Hibernate的標準了一整天!最後我發現這一點:

ElementCollection createAlias in hibernate API

我需要一個集合中引用的一個基本要素(整數),希望它適用於非基本元素。如果有人像我一樣迷路,不要放棄並轉向HQL,因爲有一個解決方案! :)