使用用户管理的连接表的单向一对多关系

@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 文档