jpa存储库在我的实体中保存了错误类型的字段

blmhpbnm  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(331)

分贝:h2
Spring ,jpa
我有一个名为message的实体,其字段类型基本上只是一个具有id的泛型父级:

public class Message {

    @OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval = true)
    @NonNull
    List<GenericDTO> records;
}

一般目的地:

@Entity
@Inheritance
public class GenericDTO {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    @JsonIgnore
    private int dto_id;

    public String toStringMessage(List<GenericDTO> records){
        return "";
    }
}

子女:

@Data
@Builder(toBuilder = true)
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class ChildDTO extends GenericDTO{
  // some fields
}

现在,当我试图保存消息时,records字段被保存为genericdto而不是childto。
这个问题与h2有关吗?

dojqjjoe

dojqjjoe1#

默认情况下,jpa将层次结构的所有实体持久化在一个表中,该表包含实体的所有可能字段的列。这就是为什么您的孩子会被保存到genericdto表中。要将层次结构中每个类的实体保存到单独的表中,需要指定继承策略:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

我建议您查看这篇文章以获取有关该主题的更多信息:https://www.baeldung.com/hibernate-inheritance

bq9c1y66

bq9c1y662#

解决方法有点棘手, GenericDTO 以及 ChildDTO 在不同的项目中,所发生的事情是childto所在的项目中的包没有被扫描,所以spring未知。添加包扫描解决了我的问题。

相关问题