我有一个类Health Check -作为类的一部分,我记录了看到多少寄生虫(没有寄生虫,有寄生虫,有寄生虫),还有寄生虫的位置(头、脚、身体)。
这样做有两种方法:
方法1
健康检查
@Entity
public class HealthCheck {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
private Parasite parasite;寄生虫
public class Parasite {
private BodyLocation bodyLocation;
private Coverage coverage;
}或者我可以:
方法2
@Entity
public class HealthCheck {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
private ParasiteNumber parasiteNumber;
private ParasiteLocation parasiteLocation;方法1是否需要寄生虫类上的@实体和表中每个Health Check的条目以及@OneToOne注释?
注寄生虫类不在其他任何地方使用。它只是Health Check的一部分。
哪条路是对的?
发布于 2022-03-26 00:23:23
一般来说,是的。在ORM (又名JPA或Hibernate)中,您正在构建一个表示数据库中事物的对象图。一个“实体”所接触的任何东西也是一个“实体”,因为它是一个图形。
它是@OneToOne还是@ManyToOne等等,取决于数据模型的性质。但是,请记住,这些连接也可以是@Lazy,所以在需要它们之前不会加载它们。
由于@Lazy,方法2可能是首选的,idk。我假设ParasiteLocation和ParasiteNumber是某种联接表。如果是这样的话,您可以加载一个带有PL和PN的HealthCheck,但是这些对象可能是寄生虫。
我不认为你的问题有一个一刀切的答案。很大程度上取决于。但好消息是,ORM可以灵活地涵盖任何/所有可能出现的场景。
发布于 2022-04-20 00:42:11
如果寄生虫只在HealthCheck类中使用,这可以看作是一个关联。关联意味着子类的存在依赖于父类的存在,因此它没有独立的生命周期,因此可以像在第二个示例中那样直接在HealthCheck中声明属性,或者可以在寄生虫类中声明这些属性,然后将其嵌入到HealthCheck类中,例如:
/*To embed a class inside in Entity you must declare it Embeddable via the JPA
annotation @Embeddable */
@Embeddable
public class Parasite {
@Column(name="body_location")
private BodyLocation bodyLocation;
@Column(name="coverage")
private Coverage coverage;}
@Entity
public class HealthCheck {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
@Embedded
private Parasite parasite;
}在这里,您的HealthCheck db表将具有寄生虫类中指定的属性,并且请注意,将不会创建寄生虫表,因为它是嵌入的,而不是实体(@ Entity )。
希望这能有所帮助!
https://stackoverflow.com/questions/71624066
复制相似问题