【问题标题】:How to create hibernate composite key using annotations如何使用注释创建休眠复合键
【发布时间】:2023-04-01 21:09:01
【问题描述】:

我正在尝试使用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 */
 }

【问题讨论】:

    标签: hibernate hibernate-mapping hibernate-annotations queryover


    【解决方案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 作为自动增量。我想是的,我们可以做到。
    猜你喜欢
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多