当前位置: 首页 > 知识库问答 >
问题:

如何实现Spring Data JPA实体与继承相关表的映射

俞学
2023-03-14

我正在使用Postgres10.8、Java8和Spring Boot2.1.9 with Data JPA来映射我的实体和我的数据库表。在我的数据库中,我对表进行了分区,并使用了继承策略。

我的结构是这样的:

我的实体:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "my_table", schema = "public")
public  class MyTableEntity {

    @Id
    @Column(name = "id")
    private Integer 

    @Column(name = "description")
    private String description;

    @Column(name = "created_at", updatable = false)
    @Convert(converter = LocalDateTimeConverter.class)
    private LocalDateTime createdAt;
  ...

我认为问题可能是由于将数据重定向到子表中插入的触发器引起的,而Spring data不识别它。

有办法修好吗?

共有1个答案

邓德厚
2023-03-14

在使用postgresql分区时,这个问题是一个已知的问题,解决这个问题是他们的目标之一

所以简单地说,hibernate会通过计算受影响行的数量来确定插入是否正确,但是hibernate只识别没有执行插入的表“my_table”。

要解决这个问题,您应该告诉hibernate不要检查行计数,方法是在您的实体中添加以下注释

@SQLInsert(sql =[YOUR_INSERT_QUERY], ResultCheckstyle = ResultCheckStyle.NONE)

另一种解决方案可以是以下方案(但要小心性能):

  • 修改触发器以返回NEW,从而将一行插入“my_table”
  • 添加第二个触发器以删除插入的行
 类似资料:
  • 我在JPA实体映射方面有问题。我有一些课: A级 类别b Classc *如何解决这个问题?*我还能使用类继承吗?还是另一个解决这个的方法? 谢了。

  • 问题内容: 目前,我有一个名为的模型类。 我想将帖子分为两种不同的类型;和。我认为做到这一点的最佳方法是通过继承,所以并且会扩展。最佳方法是什么?从哪里开始? 问题答案: 在深入探讨 多表 继承之前,我想谈一谈 单表 继承。当涉及到数据库模型的继承时,单表继承是更简单的方法。 您有多个模型绑定到同一张表,并有一个列来区分不同的模型类。但是,您通常要实现继承的原因是因为模型具有共享的属性,但也具有模

  • 在定义一个类时往往会使其继承某个父类或者实现某个接口,在扩展中实现这个功能非常方便。下面我先给出PHP语言中的代码。 <?php interface i_myinterface { public function hello(); } class parent_class implements i_myinterface { public function hello()

  • 问题内容: 我有两个班和。我有一个私有变量,可以通过setter和getter方法访问。我就是继承类用。 现在我可以更改using 的值。我想限制该选项。我希望它使其成为只读值。请协助我。 问题答案: 一种选择是从类中 删除 方法: 编辑: 为什么要这样做? 如果从继承,它应该能够执行与相同的动作。否则,继承的目的是什么?如果您仍然认为应该能够修改值而不能修改值,那么您的设计可能是错误的。您可以尝

  • 我有一个类型<code>build</code>有一个标志模板,根据活动标志位,它从这些类型继承。这使我可以从具有大量配置的许多子类中“构建”类: 所以< code >构建 但它不编译,说<code>空</code>已经是一个直接基类: 我怎样才能做到这一点,而不必创建4个不同的空结构来避免冲突呢?

  • 子类也必须遵守第一条和第二条规则。它从超类 Cat 继承了标识属性。例如: package eg; public class DomesticCat extends Cat { private String name; public String getName() { return name; }