jpa map 关系映射
jpa Map 类型的映射关系总结
参考:https://thoughts-on-java.org/map-association-java-util-map/
key 、value 都是基础类型
@Setter
@NoArgsConstructor
@ToString
@Entity
@Table(name = “company”)
public class Company {private Long id;
private String name;
private Map<String, String> addresses = new HashMap<>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
@Column(name = "name")
public String getName() {
return name;
}
/**
* key, value 都是基础类型
*/
@ElementCollection
@CollectionTable(name = "company_address", joinColumns = @JoinColumn(name = "company_id"))
@MapKeyColumn(name = "address_no")
@Column(name = "address")
public Map<String, String> getAddresses() {
return addresses;
}
}
mysql> select * from company;
+——+———+
| id | name |
+——+———+
| 1 | Alo7 |
+——+———+
1 row in set (0.00 sec)mysql> select * from company_address;
+——————+—————+——————+
| company_id | address | address_no |
+——————+—————+——————+
| 1 | beijing | 001 |
| 1 | shanghai | 002 |
+——————+—————+——————+
2 rows in set (0.00 sec)key 是基础类型,value 是 Embeddable 类
@Embeddable
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Address {private String country;
private String street;
}
@ToString
@Setter
@NoArgsConstructor
@Entity
@Table(name = "schooler")
public class Schooler {
private Long id;
private String name;
private Map<String, Address> addressMap = new HashMap<>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
@Column(name = "name")
public String getName() {
return name;
}
/**
* key 是基础类型, value 是 Embeddable 类
*/
@ElementCollection
@CollectionTable(name = "schooler_address", joinColumns = {@JoinColumn(name = "schooler_id")})
@MapKeyColumn(name = "address_no")
public Map<String, Address> getAddressMap() {
return addressMap;
}
}
mysql> select * from scholler;
+----+---------+
| id | name |
+----+---------+
| 1 | qinghua |
+----+---------+
1 row in set (0.00 sec)
mysql> select * from schooler_address;
+-------------+---------+--------+------------+
| schooler_id | country | street | address_no |
+-------------+---------+--------+------------+
| 1 | CH | Nj | 01 |
| 1 | US | NY | 02 |
+-------------+---------+--------+------------+
key 是基础类型,value 是 entity
@ToString
@Setter
@NoArgsConstructor
@Entity
@Table(name = “author”)
public class Author {private Long id;
private String aname;
private Map<String, Book> books = new HashMap<>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
@Column(name = "aname")
public String getAname() {
return aname;
}
@ManyToMany
@JoinTable(name = "author_book",
joinColumns = {@JoinColumn(name = "author_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "book_id", referencedColumnName = "id")}
)
@MapKeyColumn(name = "book_name")
public Map<String, Book> getBooks() {
return books;
}
}
@ToString
@Setter
@NoArgsConstructor
@Entity
@Table(name = "book")
public class Book {
private Long id;
private String bname;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
@Column(name = "bname")
public String getBname() {
return bname;
}
}
mysql> select * from author_book;
+-----------+---------+-----------+
| author_id | book_id | book_name |
+-----------+---------+-----------+
| 1 | 1 | java |
| 1 | 2 | c# |
+-----------+---------+-----------+
2 rows in set (0.00 sec)
mysql> select * from book;
+----+-------+
| id | bname |
+----+-------+
| 1 | java |
| 2 | c# |
+----+-------+
2 rows in set (0.00 sec)
mysql> select * from author;
+----+-------+
| id | aname |
+----+-------+
| 1 | wang |
+----+-------+
1 row in set (0.00 sec)
还没有评论,来说两句吧...