当前位置: 首页 > 面试题库 >

将Hibernate Get与多列主键配合使用

勾喜
2023-03-14
问题内容

假设我有一堂课,看起来像这样:

public class MyClass {
  @Id
  @Column(name = "ID")
  private long Id;
}

我可以使用hibernate会话对此类进行获取或加载:

MyClass a = (MyClass)session.get(MyClass.class, new Long(100));

但是,假设我有一个包含多列的类作为主键:

public MyJoinClass implements Serializable {
  private static final long serialVersionUID = -5L;
  @Id
  @Column(name = "ID")
  private long id;

  @Id
  @Column(name = "EMAIL_ADDRESS_ID")
  private long emailAddressId;
}

可以在此类中使用get或load吗?


问题答案:

尝试使用和@IdClass@EmbeddedId

public MyJoinClass implements Serializable {
  private static final long serialVersionUID = -5L;

  @EmbeddedId
  private MyJoinClassKey key;
}

public MyJoinClassKey implements Serializable{

  @Column(name = "ID")
  private long id;

  @Column(name = "EMAIL_ADDRESS_ID")
  private long emailAddressId;
}

然后使用

MyJoinClass a = (MyJoinClass )session.get(MyJoinClass .class, new MyJoinClassKey (1, "email"));

看一下这个问题,对此进行了广泛的解释。基本上,hibernate具有复合键的机制。



 类似资料:
  • 我的数据库中有两个表是通过复合主键/外键映射在一起的,我正花了一段时间让Hibernate来处理它们。我的数据库如下所示: TABLE1有一个由外键组成的复合主键,映射到TABLE_A和Table_B。TABLE2还有一个由外键组成的复合主键,映射到TABLE_A、TABLE_B和Table_D。在数据库中,TABLE2仅使用前两个外键映射回TABLE1。那里没问题。把它转换成冬眠真让我受不了。

  • 问题内容: 我试图将我的SQL数据库中表的主键从现有键更改为复合键,其中不包括现有列。由于出现以下错误消息,因此以下代码无法正常工作: 删除主键: PRIMARY附近的语法不正确。预期为COLUMN,CONSTRAINT,ID或QUOTED_ID 添加主键: PRIMARY附近的语法不正确。 期望ID T-SQL代码: 编辑 我可以通过使用以下两个查询语句来完成此操作 我没有要求SQL“ DROP

  • 我在jpa/Hibernate中映射复合键时遇到了问题。父实体和子实体都具有复合主键。 在运行时保存它时会出现以下异常: 我认为这是虚假的,因为有getter和setter。如果在priceRequestLegModel上使用mappedby=“leg”,在allocationModel上使用@mapsid,也会出现同样的错误。有人能指出我在这里做错了什么吗?

  • 问题内容: 在使用Linq to SQL时,对多对多关系表使用多列(复合)主键是否有益? 还是应该仅将身份列添加为非群集主键并适当地索引FK列? 问题答案: 不是LINQ问题。如果您的架构需要它们,请使用它们。如果您不这样做,请不要。无论哪种方式,LINQ都能很好地处理您的架构。 LINQ to SQL不能很好处理的一个领域是用于连接多对多关系的多列/键映射表,但是我不会说这严格属于您的问题解决的

  • 问题内容: 经过搜索,没有找到这个特定的菜鸟问题的答案。如果我错过了,我深表歉意。 在MySQL数据库中,我有一个带有以下主键的表 主键ID(发票,项目) 在我的应用程序中,我也会经常自己选择“项目”,而很少选择“发票”。我假设我将从这些列的索引中受益。 当我定义以下内容时,MySQL不会抱怨: 索引(发票),索引(项目),主键ID(发票,项目) 但是,我没有看到任何证据(使用DESCRIBE-我

  • 问题内容: 如何使用复合主键作为外键?看来我的尝试无效。 问题答案: 该行: 是错的。您不能那样使用,这只是父表中PK约束的名称。要将复合主键用作外键,您必须向子表中添加相同数量(组成PK)的相同数据类型的列,然后在定义中使用这些列的组合: