1

@OneToMany注釈を使用して、あるクラスの複合主キーを別のクラスから参照する際に問題があります。

複合主キーを持つ私のクラスは次のとおりです。

@Entity
@Table(name = "name_entry")
public class NameEntry {,

    @EmbeddedId
    private NameEntryPK id;

    //getters, setters
}

複合 Id クラスは次のようになります。

@Embeddable
public class NameEntryPK implements Serializable {

    @Column(name = "entry")
    protected String entry;

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

    //getters, setters
}

これは私には明らかであり、完璧に機能しています。問題は別の場所で発生します。主キーへの外部キーを持つ別のクラスが必要NameEntryです。私はそのようなことを書いています:

@Entity    
@Table(name = "content_entry")
public class ContentEntry {

    //id, other columns

    @OneToOne
    @JoinColumns ({
        @JoinColumn(name = "entry_content", referencedColumnName = "entry", insertable = false, updatable = false),
        @JoinColumn(name="title_name", referencedColumnName = "name", insertable = false, updatable = false)
    })
    protected NameEntry nameEntry;

    //getters, setters   
}

これによると、私の例外は次のとおりです。

Invocation of init method failed; nested exception is org.hibernate.MappingException:
Unable to find column with logical name: `entry` in
org.hibernate.mapping.Table(name_entry) and its related supertables and 
secondary tables

これによると: https://hibernate.onjira.com/browse/HHH-7713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel列名をアクセントで囲みました。しかし、それは機能していません。

4

1 に答える 1

2

マッピングが正しくないように見えるため、この問題がカラムネームのケースと関係があるかどうかはわかりません。指定した結合列は、「entry」フィールドを参照する「entry_content」フィールドがあることを示していますが、「name_entry」から「content_entry」に移動するように参照を設定しています。そのため、ContentEntry クラス内の「エントリ」フィールドのマッピングを探していますが、見つかりません。あなたが入れようとしていたのは、「entry」には「entry_content」の referencedColumnName があるということでした。それらを切り替えてみて、それが役立つかどうかを確認してください。

ただし、マッピング自体はあまり意味がありません。使用されている外部キーが NameEntry の主キーである場合、ContentEntry が多くの NameEntry を持つ方法がわかりません。これは一意になります。NameEntry は複数の ContentEntry を持つことができますが、ContentEntry は単一の NameEntry に対して ManyToOne の関係を持ちます。そうでない場合は、必要なテーブルまたはオブジェクト グラフがどのように見えるかを説明し、そこから作業することをお勧めします。

于 2012-11-30T16:50:14.323 に答える