[英]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.