jpa map 关系映射

一时失言乱红尘 2023-06-27 13:59 154阅读 0赞

jpa Map 类型的映射关系总结

参考:https://thoughts-on-java.org/map-association-java-util-map/

  1. key 、value 都是基础类型

    @Setter
    @NoArgsConstructor
    @ToString
    @Entity
    @Table(name = “company”)
    public class Company {

    1. private Long id;
    2. private String name;
    3. private Map<String, String> addresses = new HashMap<>();
    4. @Id
    5. @GeneratedValue(strategy = GenerationType.IDENTITY)
    6. public Long getId() {
    7. return id;
    8. }
    9. @Column(name = "name")
    10. public String getName() {
    11. return name;
    12. }
    13. /**
    14. * key, value 都是基础类型
    15. */
    16. @ElementCollection
    17. @CollectionTable(name = "company_address", joinColumns = @JoinColumn(name = "company_id"))
    18. @MapKeyColumn(name = "address_no")
    19. @Column(name = "address")
    20. public Map<String, String> getAddresses() {
    21. return addresses;
    22. }

    }

    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)

  2. key 是基础类型,value 是 Embeddable 类

    @Embeddable
    @Data
    @ToString
    @NoArgsConstructor
    @AllArgsConstructor
    public class Address {

    1. private String country;
    2. private String street;

    }

  1. @ToString
  2. @Setter
  3. @NoArgsConstructor
  4. @Entity
  5. @Table(name = "schooler")
  6. public class Schooler {
  7. private Long id;
  8. private String name;
  9. private Map<String, Address> addressMap = new HashMap<>();
  10. @Id
  11. @GeneratedValue(strategy = GenerationType.IDENTITY)
  12. public Long getId() {
  13. return id;
  14. }
  15. @Column(name = "name")
  16. public String getName() {
  17. return name;
  18. }
  19. /**
  20. * key 是基础类型, value 是 Embeddable 类
  21. */
  22. @ElementCollection
  23. @CollectionTable(name = "schooler_address", joinColumns = {@JoinColumn(name = "schooler_id")})
  24. @MapKeyColumn(name = "address_no")
  25. public Map<String, Address> getAddressMap() {
  26. return addressMap;
  27. }
  28. }
  29. mysql> select * from scholler;
  30. +----+---------+
  31. | id | name |
  32. +----+---------+
  33. | 1 | qinghua |
  34. +----+---------+
  35. 1 row in set (0.00 sec)
  36. mysql> select * from schooler_address;
  37. +-------------+---------+--------+------------+
  38. | schooler_id | country | street | address_no |
  39. +-------------+---------+--------+------------+
  40. | 1 | CH | Nj | 01 |
  41. | 1 | US | NY | 02 |
  42. +-------------+---------+--------+------------+
  1. key 是基础类型,value 是 entity

    @ToString
    @Setter
    @NoArgsConstructor
    @Entity
    @Table(name = “author”)
    public class Author {

    1. private Long id;
    2. private String aname;
    3. private Map<String, Book> books = new HashMap<>();
    4. @Id
    5. @GeneratedValue(strategy = GenerationType.IDENTITY)
    6. public Long getId() {
    7. return id;
    8. }
    9. @Column(name = "aname")
    10. public String getAname() {
    11. return aname;
    12. }
    13. @ManyToMany
    14. @JoinTable(name = "author_book",
    15. joinColumns = {@JoinColumn(name = "author_id", referencedColumnName = "id")},
    16. inverseJoinColumns = {@JoinColumn(name = "book_id", referencedColumnName = "id")}
    17. )
    18. @MapKeyColumn(name = "book_name")
    19. public Map<String, Book> getBooks() {
    20. return books;
    21. }

    }

  1. @ToString
  2. @Setter
  3. @NoArgsConstructor
  4. @Entity
  5. @Table(name = "book")
  6. public class Book {
  7. private Long id;
  8. private String bname;
  9. @Id
  10. @GeneratedValue(strategy = GenerationType.IDENTITY)
  11. public Long getId() {
  12. return id;
  13. }
  14. @Column(name = "bname")
  15. public String getBname() {
  16. return bname;
  17. }
  18. }
  19. mysql> select * from author_book;
  20. +-----------+---------+-----------+
  21. | author_id | book_id | book_name |
  22. +-----------+---------+-----------+
  23. | 1 | 1 | java |
  24. | 1 | 2 | c# |
  25. +-----------+---------+-----------+
  26. 2 rows in set (0.00 sec)
  27. mysql> select * from book;
  28. +----+-------+
  29. | id | bname |
  30. +----+-------+
  31. | 1 | java |
  32. | 2 | c# |
  33. +----+-------+
  34. 2 rows in set (0.00 sec)
  35. mysql> select * from author;
  36. +----+-------+
  37. | id | aname |
  38. +----+-------+
  39. | 1 | wang |
  40. +----+-------+
  41. 1 row in set (0.00 sec)

发表评论

表情:
评论列表 (有 0 条评论,154人围观)

还没有评论,来说两句吧...

相关阅读