花了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", insertable = false, updatable = false)
@JoinColumn(name = "last_name", referencedColumnName = "last_name", insertable = false, updatable = false)
private User parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.EAGER)
private Set<User> children;
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class UserCompositeId implements Serializable {
private Integer id;
private String firstName;
private String lastName;
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
块中可能存在错误
您需要使用@notfind(action=notfoundaction.ignore)
。如果没有记录,那么它将为其分配null。
@ManyToOne
@JoinColumn(name = "parent_id", referencedColumnName = "id", insertable = false, updatable = false)
@JoinColumn(name = "first_name", referencedColumnName = "first_name", insertable = false, updatable = false)
@JoinColumn(name = "last_name", referencedColumnName = "last_name", insertable = false, updatable = false)
@NotFound(action=NotFoundAction.IGNORE)
private User parent;
我有以下实体: 我第一次使用复合主键,所以我不知道它应该如何工作。问题可能来自定义。第二个参数应该表示ID。但是没有一个主键,而是有两个主键,所以我认为我应该将id类添加到id参数中,但这不起作用。如何使用带有CrudRepository的IdClass键保存具有复合主实体?
OrderDetailSPK 阿奎利安试验
我正在尝试使用hibernate解决应用程序中的数据库映射问题。我们使用JPA注释这些类,到目前为止我们是成功的。但是,我们现在想引入一个组合键,它包含一个标识客户的唯一字符串和一个标识数据库条目的字符串。为了设置复合键,我们使用一个名为MandtId.java的IdClass。 然而,我们的映射似乎不起作用,因为它在另一侧找不到要连接的列。 以下是一些代码片段来显示我们的注释: MandtId.
我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。 背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。 与具有多对多关系,使用称为“和实体。 所以,我有,主键为(,)。本身是的外键。 也有一个字段。我希望(,)是的复合外键。 我的PersonSession代码: } 这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——ar
模板实体: 工作流实体: 指挥实体:
问题内容: 我收到以下hibernate异常: 简化的Matchup类如下所示: 简化的Team类如下所示: 笔记: 比赛和团队都有子类。我不确定这是否会影响局势。 我的persistence.xml中列出了Matchup和Team都包括在内。 如果我在两个getter方法上都使用@Transient批注,该错误将消失。 谁能阐明为什么会发生这种异常? 问题答案: 我发现了问题:我没有将Team类