我有三个实体,我正在建模,并与相关的注解有问题。我基本上有一个类,我打算返回给调用者,一个嵌套的项目列表,项目可以包含一个嵌套的端点列表。它是一个顶级has,一对多,然后嵌套的一对多有两个一对多。
我和你玩过 @JoinColumn
注解,我试图 @ManyToOne
在一家公司的另一边(但它不喜欢,它是一个漫长的…)。我只是个新手,不知道怎么做。我认为 mappedById
是解决办法,但我不确定。
主要问题:这段代码允许我“保存”到数据库,但是在检索时,downdecetorpackage中的项目列表是空的。
cascadetype.all抛出我不完全理解的引用完整性错误。
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
public class DownDetectorPackage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(mappedBy="id",fetch = FetchType.EAGER)
private List<Project> projects;
@Temporal(TemporalType.DATE)
private Date dateJobsLastRan;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Project{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String projectName;
@OneToMany(mappedBy="id")
private List<Service> externalDependencies;
@OneToMany(mappedBy="id")
private List<Service> endpoints;
}
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Service {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String url;
private Boolean endpointIsUp;
private String serviceName;
}
2条答案
按热度按时间6pp0gazn1#
您应该将每个联接列标记为joincolumn,表示从其他实体引用的列。然后,您应该说明使用此列的关系类型。
最后,请注意,在关系数据库中,每个fk列只能取1个值(引用的实体id的pk),因此,在实体上,应将数据类型标记为引用的实体,而将no标记为集合。
我想这能解决你的问题。
qvsjd97n2#
您应该使用@joincolumn而不是mappedby。当您在另一个类中也使用了@manytoone时,可以使用mappedby。
所以你的最后一堂课应该是这样的(这也适用于你提到的其他课程):
另外,请记住在@joincolumn注解中声明父对象名称,因为它将为该外键创建列。