Jak*_*sić 4 java hibernate jpa spring-boot
我正在 Spring Boot 中创建一个 Todo 应用程序,我需要创建两个表:Task
和Todo
( Todo
extends Task
)。
在Task
表中是一个名为的字段description
,我想防止在Todo
表中创建该列。
我该怎么做?
任务(父):
package com.example.todo.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Task {
@Id
private long id;
private String name;
private String description;
}
Run Code Online (Sandbox Code Playgroud)
待办事项(孩子):
package com.example.todo.model;
import javax.persistence.Entity;
import javax.persistence.Transient;
@Entity
public class Todo extends Task {
private boolean isChecked;
}
Run Code Online (Sandbox Code Playgroud)
我建议你清理你的设计,因为从其他具体类继承的具体类(通常)是一种代码气味。正确的解决方案是将两个类的公共部分分解为一个(抽象的)超类,然后将特定字段添加到具体的继承类中:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Completable {
@Id
private long id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
@Entity
public class Task extends Completable {
private String description;
}
Run Code Online (Sandbox Code Playgroud)
@Entity
public class Todo extends Completable {
private boolean isChecked;
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以将行为分组在它所属的类中,并且不必确保某件事包含描述而它不应该包含描述。
归档时间: |
|
查看次数: |
68 次 |
最近记录: |