【发布时间】: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_id 的field。我怎样才能解决这个问题?因为对parent_id 列的唯一“引用”是Parent 类的@JoinColumn。
有什么建议吗?
【问题讨论】:
-
最简单的解决方法是在 Child 类中定义 @ManyToOne 关系。然后在父类中指定 mappedBy。
标签: java hibernate spring-data-jpa hibernate-mapping