如何使用Spring Data JPA构建具有既是主键又是外键的实体?(Java JPA 2)

bluesky1年前 ⋅ 82 阅读

ChatGPT的回答仅作参考:

在使用Spring Data JPA构建具有既是主键又是外键的实体时,需要使用@EmbeddedId注解和@MapsId注解。

首先,需要创建一个嵌入式主键类,该类包含实体的主键和外键属性。例如:

```
@Embeddable
public class MyEmbeddedId implements Serializable {
    @Column(name = "id")
    private Long id;

    @Column(name = "foreign_id")
    private Long foreignId;

    // getters and setters
}
```

然后,在实体类中使用@EmbeddedId注解将嵌入式主键类作为实体的主键。例如:

```
@Entity
public class MyEntity {
    @EmbeddedId
    private MyEmbeddedId id;

    // other entity properties

    @MapsId("id")
    @ManyToOne
    @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
    private MyForeignEntity foreignEntity;

    // getters and setters
}
```

在这个例子中,@MapsId注解将外键属性映射到嵌入式主键类中的id属性。@ManyToOne注解表示这是一个多对一的关系,@JoinColumn注解指定了外键列的名称和参考列的名称。

最后,需要在MyEntityRepository中定义一个方法来查询具有特定外键值的实体。例如:

```
public interface MyEntityRepository extends JpaRepository<MyEntity, MyEmbeddedId> {
    List<MyEntity> findByForeignId(Long foreignId);
}
```

这个方法将返回具有特定外键值的所有实体。

全部评论: 0

    相关推荐