【发布时间】:2022-01-10 02:17:02
【问题描述】:
我正在做一个项目,我必须实现一个类层次结构。例如,典型的 Person 层次结构。
我有一个抽象超类Person 及其子类Student。
超类人:
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(
name = "persons"
uniqueConstraints = {
@UniqueConstraint(name = "persons_name_unique", columnNames = "name")
})
public abstract class Person extends AbstractPersistable<Long>{
@Getter
private String name;
@Getter
private int age;
// ...
}
子类学生:
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Table(name = "students")
public class Student extends Person {
@Getter
private int grade;
// ...
}
问题:
我的问题是我在使用.builder() 时无法访问超类的属性。
Student student =
Student.builder()
.name("UniqueName") //CompilerError(Cannot resolve method 'name' in 'StudentBuilder')
.age(19)
.grade(2)
.build();
但是,当我从超类 Person 中删除 @Builder 时,我只能访问超类的属性,而不能访问子类的属性。
而当我从子类中移除 @Builder 并将其保留在超类中时,情况正好相反。
我的问题是我做错了什么 - 我相信这是因为 @Builder 注释,@Builder 的正确表示是什么
提前致谢!
【问题讨论】:
标签: java jpa inheritance builder