【发布时间】:2020-10-24 15:14:21
【问题描述】:
有趣的是,对于看似常见的情况,我找不到任何解决方案!所以我在这里要求向Spring Data JPA 的经验丰富的专业人士学习。我会考虑使用Lombok 使示例代码更简洁。
考虑一个简单的 IMDB 示例 Web 应用程序。我定义了两个简单的实体如下:
@Data
@Entity
public class Movie {
@Id
@GeneratedValue
private long id;
private String title;
private int year;
private int rating;
}
@Data
@Entity
public class Actor {
@Id
@GeneratedValue
private long id;
private String firstName;
private String lastName;
private Date birthday;
private String gender;
}
现在我们需要一个连接表来连接这两个实体;但这不仅仅是一个简单的连接表。除了actor 和movie 列之外,该表还有一些附加属性。我们不想在此处添加ID 列来浪费存储空间,而是使用由actor 和movie 组成的复合键:
@Data
@Embeddable
public class MovieActorId implements Serializable {
private Actor actor;
private Movie movie;
}
@Data
@Entity
public class MovieActor {
@EmbeddedId
private MovieActorId id;
private int salary;
private String characterName;
}
这里有两个多对一关系:MovieActor >-- Actor 和 MovieActor >-- Movie。
现在我的主要问题是:“假设上面的设计,我应该如何定义这个设计中的@ManyToOne关系?”
注意:我相信如果我们在MovieActor 连接表中添加一个额外的ID 列而不是复合/嵌入的MovieActorId,JPA 代码将变得相当简单.但是假设我们有某种限制,我们需要尽可能地坚持这种设计。
【问题讨论】:
标签: java spring hibernate jpa spring-data