首页 > 解决方案 > 无法解析 @OneToMany 子表 (@JoinColumn) 的属性

问题描述

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

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

父类

@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;

}

子类

@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

我知道fieldparent_id. Child entity我怎样才能解决这个问题?由于该parent_id列的唯一“参考”是@JoinColumn类的Parent

有什么建议么?

标签: javahibernatespring-data-jpahibernate-mapping

解决方案


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

    @ManyToOne
    private Parent p;

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

推荐阅读