0

属性と多対多の関係があると仮定します。これを2つの1対多の関係に置き換えたいと思います。キーを構成すると、主キーに無効な数の属性があるという奇妙な警告が表示されます。

これが私が欲しいものです:

User <1:N> Notification <N:1> Thread

user_idとで構成される複合キーを作成するには、通知が必要であることに注意してくださいthread_id

それが私が試したことです:

@Entity
public class Notification implements Serializable {

    @EmbeddedId
    @AttributeOverrides( {
        @AttributeOverride(name = "user_id", column = @Column(nullable = false)),
        @AttributeOverride(name = "thread_id", column = @Column(nullable =false))
    })
    private NotificationPK id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id", insertable = false, updatable = false)
    private User user;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "thread_id", insertable = false, updatable = false)
    private Thread thread;    
}   

Threadクラスでは、次のようになります。

    @OneToMany(fetch=FetchType.LAZY)
    @JoinTable(
        name="notifications",
        joinColumns=@JoinColumn(name="thread_id")
    )
    private Set<Notification> notifications = new HashSet<Notification>();

次のように使用NotificationPKします。

@Embeddable
public class NotificationPK implements Serializable {

    Long user_id;
    Long thread_id;
}

ただし、起動するとすぐに、次の例外が発生します。

 Caused by: org.hibernate.MappingException: 
     Foreign key (FK4BD694E87364C017:notifications 
        [notifications_thread_id,notifications_user_id])) 
     must have same number of columns as the referenced 
     primary key (notifications 
        [thread_id,notifications_thread_id,notifications_user_id])

私は何が間違っているのですか?なぜ彼はこれが主キーの一部であると期待しているのですか?

4

1 に答える 1