Search code examples
hibernatehibernate-mappinghibernate-annotationsqueryover

How to create hibernate composite key using annotations


I am trying to use hibernate annotations to insert data to a MySQL database table which doesn't have a primary key defined.

However the fact is 2 fields of that table together are unique in the table.how can i achieve the same using hibernate annotation?.

here is my code..

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

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

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

Solution

  • You can use @Embeddeble and @EmbeddedId to create a composite key and map it with your Entity. For example:

    @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 */
     }
    

    Then use RolesMenuItems in your Java code to persist entities in usual way.

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

    Edit: To persist the entity:

    RolesMenu roleMenu = new RolesMenu();
    roleMenu.setRoleID(...);
    roleMenu.setMenuItemID(...);
    
    RolesMenuItems roleItem = new RolesMenuItems();
    roleItem.setRoleMenu( roleMenu );
    
    em.persist(roleItem);