@Embeddable有自己的id

问题描述 投票:0回答:1

我看到许多使用@Embeddable这样的一对多关系的例子:

@Entity
@Table(name = "profiles")
public class Profile {


    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @ElementCollection
    @CollectionTable(name = "profile_addresses", joinColumns = @JoinColumn(name = "profile_id"))
    private List<Address> addresses;

    // getters, setters
}

@Embeddable
public class Address {

    @Column(name = "zip_code")
    private String zipCode;

    // other fields
}

它适用于这样的表:

  profiles:                   addresses:
| id | name |         | profile_id | zip_code |
| 1  | Alex |         |     1      |   95050  |
                      |     1      |   95109  |

但是如何在embeddable Address实体中使用自己生成的id?例如,在这样的表中:

  profiles:                   addresses:
| id | name |         | profile_id | address_id | zip_code  |
| 1  | Alex |         |     1      |      1     |   95050   |
                      |     1      |      2     |   95109   |
java jpa
1个回答
2
投票

为Embeddable定义主键时,它不再是Embeddable。 Embeddable由其父实体定义,并且没有自己的身份。这就是为什么Embeddables只能通过它的父实体访问,无论如何也无法解除引用。

https://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html

© www.soinside.com 2019 - 2024. All rights reserved.