问题描述
花了 3 天时间寻找解决方案,最后我来到这里寻求社区智慧。
我有如下自引用实体:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@IdClass(CompositeUserId.class)
@Table(name = "user",schema = "dbo")
public class User implements Serializable {
@Id
@Column(name = "id")
private Integer id;
@Id
@Column(name = "first_name")
private String firstName;
@Id
@Column(name = "last_name")
private String lastName;
@ManyToOne
@JoinColumn(name = "parent_id",referencedColumnName = "id",insertable = false,updatable = false)
@JoinColumn(name = "first_name",referencedColumnName = "first_name",updatable = false)
@JoinColumn(name = "last_name",referencedColumnName = "last_name",updatable = false)
private User parent;
@OneToMany(mappedBy = "parent",fetch = FetchType.EAGER)
private Set<User> children;
我的 CompositeUserId.class:
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class UserCompositeId implements Serializable {
private Integer id;
private String firstName;
private String lastName;
当我尝试从 user
表中检索所有数据时,出现错误:
org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find ...User with id UserCompositeId@19e66569; nested exception is javax.persistence.EntityNotFoundException:
我想 @JoinColumn
块中可能存在某种错误。
这是导致错误的sql查询:
SELECT *
FROM dbo.user ur1 LEFT OUTER JOIN dbo.user ur2 ON ur1.first_name=ur2.first_name AND ur1.parent_id=ur2.id AND ur1.last_name=ur2.last_name
WHERE ur1.first_name='First Name' AND ur1.id=130 AND ur1.last_name='Last Name'
我通过手动运行确保请求不会返回数据库中的任何内容,但发现如果我将 id
更改为 parent_id
它将返回数据,所以再次,可能是一些错误在 @JoinColumn
块
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)