2012-05-07 11 views
2

テーブルA、B、Cがあります。ここでBは列を追加する関連テーブルです。テーブルが埋め込まれたHibernateの条件1対多テーブル

| | 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 
} 

エンティティC

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

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

    // getters, setters 
} 

@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 
} 

埋め込み主キークラス埋め込まれているB・エンティティのリストを

エンティティA

...と私はそれをこの方法を実行しようとしました

具体的な名前を持つオブジェクトCが関連付けられているようなオブジェクトを取得したいと思いますが、それは、私は次の例外を持っている

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

仕事をdoesnt :

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でコレクション要素を参照する方法を見つけることを試みました!私はそれが同様に非基本要素のために働く願って、コレクション内の基本要素(整数)を参照するために必要な

ElementCollection createAlias in hibernate API

:最後に私はこれを見つけました。誰かが私のように迷ってしまった場合は、あきらめてHQLに向かわせてください。解決策があります。 :)

関連する問題