分贝: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有关吗?
2条答案
按热度按时间dojqjjoe1#
默认情况下,jpa将层次结构的所有实体持久化在一个表中,该表包含实体的所有可能字段的列。这就是为什么您的孩子会被保存到genericdto表中。要将层次结构中每个类的实体保存到单独的表中,需要指定继承策略:
我建议您查看这篇文章以获取有关该主题的更多信息:https://www.baeldung.com/hibernate-inheritance
bq9c1y662#
解决方法有点棘手,
GenericDTO
以及ChildDTO
在不同的项目中,所发生的事情是childto所在的项目中的包没有被扫描,所以spring未知。添加包扫描解决了我的问题。