当前位置: 首页 > 知识库问答 >
问题:

Hibernate注释映射到具有复合键的联接表

耿和韵
2023-03-14
@Entity
@Table(name = "parent")
public class Parent {
  @Id
  private String parentId;
  @Column(name = "data")
  private String data;
  @OneToOne
  private Child child;
}
@Entity
@IdClass(ChildKey.class)
@Table(name = "child")
public class Child{
  @Id
  private String parentId;
  @Id
  private String username;
  @Column(name = "data")
  private String childData;
}

public class ChildKey implements Serializable {
  private String parentId;
  private String username;
}

如果我没有指定JoinColumn,hibernate将尝试使用字段child_username和child_parentid进行映射。如果我只指定一个Joincolumn,我会得到一个断开的映射。如果指定了两个JoinColumns,则parent上没有列可指定。

我如何映射这个类并将用户名作为标准传入?(它来自身份验证数据)或者如果我偏离了轨道,我如何以不同的方式这样做。

共有1个答案

谯志诚
2023-03-14

您可能可以使用派生标识。

父类将保持不变;但是您可以指定一个@onetoone映射回子级的父级,并且子级ChildKey类如下所示:

@Entity
@IdClass(ChildKey.class)
@Table(name = "child")
public class Child{
  @Id
  @OneToOne(mappedBy="child")
  private Parent parent;
  @Id
  private String username;
  @Column(name = "data")
  private String childData;
}

public class ChildKey implements Serializable {
  private String parent; // name matches name of the @Id field and type matches type of Parent @Id field
  private String username; // name and type match those of the @Id field
}

在JPA2.1规范的2.4.1节中讨论了派生标识。

 类似资料:
  • 问题内容: 使用Hibernate,可以创建一个组合ID,其中要映射到该ID的列之一可以为空值吗? 这是为了处理具有唯一键的旧表,该键可以具有空值,但不能具有主键。 我意识到我可以只向表中添加一个新的主键列,但是我想知道是否有任何方法可以避免这样做。 问题答案: 否。主键不能为null。

  • 我有这些桌子: 由该类表示: 原因:org.hibernate.mappingException:无法确定:java.util.map的类型,位于表:product,列:[org.hibernate.mapping.simplevale.getType(simplevale.java:349)位于org.hibernate.mapping.simplevale.isvalid(simplevale

  • 问题内容: 我在为某些实体设置jpa映射时遇到麻烦。我有一个如下定义的父实体。 然后,我有一个带有复合键的子实体,以及此表的主键的外键,如下所示: 我知道子实体不正确,但是我不确定如何将其设置为具有复合PK。我知道我需要设置一个PK类,但是当一个字段是父类的外键时,我不确定该怎么做。一旦设置好,父级将如何引用子级实体? 任何帮助表示赞赏。 问题答案: 这受JPA 2规范的 第2.4.1节“与派生身

  • 问题内容: 我正在尝试使用复合主键在学生和教学课程之间建立许多联系: 我的课程: 教学班: 集合对象: 现在,主键: 当我尝试对学生进行坚持时,出现以下错误: 我究竟做错了什么? 问题答案: 我解决了这个问题。我映射了Getter而不是field。

  • 我想让hibernate生成一些带有外键的表等等。我将给出我希望hibernate生成的查询的一个示例: 所以这个查询应该由hibernate通过注释生成。与此对应的类是: 有关中的应映射到的内容的示例(中的每个助记符在中只有一个值): 正如您所看到的,我在文档的帮助下做了一些尝试,但是我不能让Hibernate生成外键。如果有人能告诉我这个类需要的注释和值,那就太好了,这样我就可以自己为其他类做

  • 我有两张阵列图。 有没有办法用流来完成这个任务? 或者我必须通过映射迭代?