我用冬眠. 我有一堂抽象课:

@Data
@Entity
@Table(schema = "timesheetdb", name = "project_property")
@IdClass(ProjectPropertyPK.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class ProjectPropertyAbstract {

    @Id
    private Integer projectId;

    @Id
    private String type;
}
@Data
@Embeddable
public class ProjectPropertyPK implements Serializable {

    private Integer projectId;
    private String type;
}

和继承人

@Data
@Entity
@DiscriminatorValue("WAGE_FUND")
public class ProjectWageFundProperty extends ProjectPropertyAbstract {

    private Boolean isEnabled;
    private Integer percentProfit;
}
@Data
@Entity
@DiscriminatorValue("CROSS_STAFFING")
public class ProjectCrossStaffingProperty extends ProjectPropertyAbstract {
    
    private Boolean isEnabled;
}

我希望在类的后代中指定属性的类型是可能的,并且所有属性都存储在一个表中.

此外,在当前的实现中,启动服务器时会出现错误: Repeated column in mapping for entity: com.timesheet.entity.project.property.ProjectCrossStaffingProperty column: type (should be mapped with insert="false" update="false")

我试图在"type"字段上方指定@列注释(insert ="false"update ="false"),但是在保存和检索数据时,"type"字段被指定为null,因此不可能返回唯一属性.

推荐答案

不可能将DiscriminatorColumn指定为属性,就像这里对type所做的那样,因此出现了原始错误. 如果添加了建议的注释,则该值将为null,b/c不再保存或从数据库中提取.

解决方案是:如果不需要的话,删除typeprops (通常不应该这样),或者保留注释并在每个子类中手动设置.

public ProjectWageFundProperty() {
    setType("WAGE_FUND");
}

Java相关问答推荐

收听RDX中用户数据的变化

scanner 如何在执行hasNextLine一次后重新读取整个文件?

SQlite for Android无法使用json_group_array/json_object

使用@MappdSuperClass扩展ParentClass&Won t继承ParentClass属性

将不受支持的时区UT重写为UTC是否节省?

使用Spring Boot3.2和虚拟线程的并行服务调用

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

由于我在Main方法中关闭了 scanner ,但在该方法中创建了一个新的 scanner ,因此出现了错误

Mapstruct不能正确/完全映射属性

从Spring5迁移到Spring6:无法在雅加达包中找到类

什么是Java原子属性的正确getter和setter

如何在Spring Java中从数据库列中获取JSON中的具体数据

如何使用Jackson将XML元素与值和属性一起封装

Jolt变换JSON数组问题

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

try 将JSON字符串响应从API转换为映射字符串、对象>;时出错

Java 21中泛型的不兼容更改

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

由于版本不匹配,从Java 8迁移到Java 17和Spring 6 JUnit4失败

如何以事务方式向ibmmq发送消息