使用使用者管理的連線表的單向一對多關係

@Entity
@Table(name="FOO")
public class Foo {
    private UUID fooId;
    
    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="fooId"),
        inverseJoinColumns = @JoinColumn(name="barId", unique=true))
    private List<Bar> bars;
}

@Entity
@Table(name="BAR")
public class Bar {
    private UUID barId;

    //No Mapping specified here.
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId", unique = true)
    private Bar bar;

    //You can store other objects/fields on this table here.
}

使用使用者管理的中間連線表指定一個 Foo 物件與許多 Bar 物件之間的單向關係。

這類似於 ManyToMany 關係,但是如果你向目標外來鍵新增 unique 約束,你可以強制它是 OneToMany

Foo 物件作為行儲存在名為 FOO 的表中。Bar 物件作為行儲存在名為 BAR 的表中。FooBar 物件之間的關係儲存在名為 FOO_BAR 的表中。作為應用程式的一部分,有一個 FooBar 物件。

請注意,Bar 物件沒有對映回 Foo 物件。Bar 物件可以自由操作而不會影響 Foo 物件。

在設定 User 物件時,常常與 Spring Security 一起使用,該物件具有可以執行的 Role 列表。你可以向使用者新增和刪除角色,而無需擔心刪除 Role 的級聯。

StackOverflow 文件