簡體   English   中英

在 Spring JPA ManyToMany 中向自動映射表添加額外的自定義列

[英]Add extra custom column to auto mapped Table in Spring JPA ManyToMany

@Getter @Setter @NoArgsConstructor @AllArgsConstructor
@Table(name = "my_users")
public class MyUsers {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false)
    private Long id;

    @Column(nullable = false, unique = true)
    private String userName;
    private String password;

    @ManyToMany
    private List<MyUsers> connections;
}

這是我的 MyUsers 模型類。 我正在使用休眠和 MySQL。

    @ManyToMany
    private List<MyUsers> connections;

這種 ManyToMany 關系會自動創建具有“my_users_id”“connections_id”列的表“my_users_connections” 如何向此自動映射表添加額外的列?

這不是理想的解決方案...

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "my_users")
public class MyUsers implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false)
    private Long myUsersId;

    @Column(nullable = false, unique = false)
    private String userName;
    private String password;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "my_users_connections",
            joinColumns = { @JoinColumn(name = "my_users_id") },
            inverseJoinColumns = { @JoinColumn(name = "connections_id") })
    private List<MyUsers> connections;
}

創建嵌入式 id MyUsersConnectionsPK

@Data
@Embeddable
public class MyUsersConnectionsPK implements Serializable {

    @Column(name = "my_users_id")
    private Long myUsersId;

    @Column(name = "connections_id")
    private Long connectionsId;

}

創建代表 ManyToMany 的MyUsersConnections

@Data
@Entity
@Table(name = "my_users_connections")
public class MyUsersConnections implements Serializable {

    @EmbeddedId
    private MyUsersConnectionsPK id;

    @ManyToOne
    @MapsId("my_users_id")
    @JoinColumn(name = "my_users_id")
    private MyUsers myUsersId;

    @ManyToOne
    @MapsId("connections_id")
    @JoinColumn(name = "connections_id")
    private MyUsers connectionsId;

    @Column(name = "extra_column")
    private String extraColumn;
}

創建 JPA 存儲庫

@Repository
public interface MyUsersConnectionsRepository extends JpaRepository<MyUsersConnections, MyUsersConnectionsPK> {

    List<MyUsersConnections> findMyUsersConnectionsByMyUsersIdMyUsersId(Long id);
}

以及簡單的使用示例:

@Service
public class Test {

    @Autowired
    private MyUsersConnectionsRepository myUsersConnectionsRepository;

    @Autowired
    private MyUsersRepository myUsersRepository;

    public void test() {
        MyUsers myUsers = new MyUsers();
        myUsers.setUserName("user name");
        myUsers.setPassword("password");
        MyUsers myUsers2 = new MyUsers();
        myUsers2.setUserName("user name 2");
        myUsers2.setPassword("password 2");
        myUsers.setConnections(Collections.singletonList(myUsers2));
        myUsers = myUsersRepository.saveAndFlush(myUsers);
        List<MyUsersConnections> myUsersConnections = myUsersConnectionsRepository.findMyUsersConnectionsByMyUsersIdMyUsersId(myUsers.getMyUsersId());
        MyUsersConnections item = myUsersConnections.get(0);
        item.setExtraColumn("Extra column");
        myUsersConnectionsRepository.saveAndFlush(item);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM