【问题标题】:Could not resolve property of @OneToMany child table (@JoinColumn)无法解析 @OneToMany 子表 (@JoinColumn) 的属性
【发布时间】:2020-01-07 17:29:35
【问题描述】:

尝试运行自定义查询时出现上述错误。我知道使用休眠,您需要映射到 entity 名称(而不是 column 名称)。但是,在@OneToMany 的情况下,我没有子项中的列。让我用一个简单的例子来解释(我已经删除了所有其他列和方法):

@Query("SELECT ch.randomColumnHere FROM Parent pa INNER JOIN Child ch ON pa.id = ch.parent_id")

Parent.class

@Entity(name="Parent")
@Table(name="parent")
@Builder(toBuilder = true)
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@NoArgsConstructor
@Setter
@Getter
public class Parent {

    @Id
    @SequenceGenerator(name = "parent_id_seq", sequenceName = "parent_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "parent_id_seq")
    private Long id;
    @OneToMany (cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "parent_id", nullable = false, updatable = false)
    private List<Child> children;

}

Child.class

@Entity(name="Child")
@Table(name="child")
@Builder(toBuilder = true)
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@NoArgsConstructor
@Setter
@Getter
public class Child {

    @Id
    @SequenceGenerator(name = "child_id_seq", sequenceName = "child_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "child_id_seq")
    private Long id;

    @Column(name="randomcolumnhere")
    private Double randomColumnHere;
}

我得到以下异常:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: could not resolve property: parent_id

我知道Child entity 中没有名为parent_idfield。我怎样才能解决这个问题?因为对parent_id 列的唯一“引用”是Parent 类的@JoinColumn

有什么建议吗?

【问题讨论】:

  • 最简单的解决方法是在 Child 类中定义 @ManyToOne 关系。然后在父类中指定 mappedBy。

标签: java hibernate spring-data-jpa hibernate-mapping


【解决方案1】:

在子类中添加如下关系并相应地更改查询。

    @ManyToOne
    private Parent p;

    @Query("SELECT ch.randomColumnHere FROM Parent pa INNER JOIN Child ch ON pa.id = ch.p.id")

【讨论】:

    【解决方案2】:

    HQL 查询使用实体及其关联。关联是否使用连接表这一事实对于 HQL 并不重要:您在关联中导航,Hibernate 会进行适当的 SQL 转换。

    SELECT ch.randomColumnHere FROM Parent pa INNER JOIN pa.children;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多