如何使用注释创建休眠复合键

Posted

技术标签:

【中文标题】如何使用注释创建休眠复合键【英文标题】:How to create hibernate composite key using annotations 【发布时间】:2012-12-05 20:35:42 【问题描述】:

我正在尝试使用hibernate annotations 将数据插入到未定义主键的mysql database 表中。

然而事实是该表的 2 个字段在表中是唯一的。我如何使用休眠注释实现相同的功能?

这是我的代码..

 @Entity
 @Table(name = "RolesMenuItems")
    public class RolesMenuItems 

       @Column(name = "RoleID")
       private String roleID;

       @Column(name = "MenuItemID")
       private String menuItemID;
  /*setter getter methods */
 

【问题讨论】:

【参考方案1】:

您可以使用@Embeddeble@EmbeddedId 创建复合键并将其映射到您的实体。例如:

@Embeddable
public class RolesMenu 
    @Column(name = "RoleID")
    private String roleID;

    @Column(name = "MenuItemID")
    private String menuItemID;

    //getter, setter methods


 @Entity
 @Table(name = "RolesMenuItems")
 public class RolesMenuItems 

     @EmbeddedId
     private RolesMenu roleMenu;

  /*setter getter methods */
 

然后在您的 Java 代码中使用 RolesMenuItems 以常规方式持久化实体。

参考:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e535

编辑: 持久化实体:

RolesMenu roleMenu = new RolesMenu();
roleMenu.setRoleID(...);
roleMenu.setMenuItemID(...);

RolesMenuItems roleItem = new RolesMenuItems();
roleItem.setRoleMenu( roleMenu );

em.persist(roleItem);

【讨论】:

好的,谢谢..但是我怎样才能插入 roleID 和 menuItemID 的值..你能告诉我吗?? 更新了答案。请看一下。 RolesMenu 类中有 getter setter 方法吗?? 如何为 roleID,menuItemID 指定列名? 我们可以使用生成策略生成复合键吗?我的意思是 roleIDmenuItemID 作为自动增量。我想是的,我们可以做到。

以上是关于如何使用注释创建休眠复合键的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中的 Cassandra 中注释/使用复合分区键?

为啥在休眠中不鼓励复合键?

具有复合键的一对多注释映射

HibernateTemplate 复合键获取值 null

使用复合键(长,日期)选择最新的对象的休眠查询

休眠 - 使用包含父 ID 的复合键 - OneToMany