(no commit message)
[utils] / security / impl / src / main / java / org / wamblee / usermgt / User.java
index 8bccfabad6ca0435a30e1ae5b40ba096d53c1b8c..00280bcc49bbbdba709e69d9de2d253950a6abfd 100644 (file)
@@ -25,11 +25,15 @@ import java.io.Serializable;
 import java.util.Set;
 import java.util.TreeSet;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToMany;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 import javax.persistence.Version;
@@ -41,16 +45,27 @@ import javax.persistence.Version;
  */
 @Entity
 @Table(name = "SEC_USER")
-public class User implements Serializable,
-    Comparable {
-    
+@NamedQueries( {
+    @NamedQuery(name = User.QUERY_FIND_BY_NAME, query = "select u from User u where u.name = :" +
+        User.NAME_PARAM),
+    @NamedQuery(name = User.QUERY_FIND_BY_GROUP_NAME, query = "select user from User user join user.groups grp where grp.name = :name"),
+    @NamedQuery(name = User.QUERY_COUNT_USERS, query = "select count(u) from User u"),
+    @NamedQuery(name = User.QUERY_ALL_USERS, query = "select u from User u")})
+public class User implements Serializable, Comparable {
+
+    public static final String QUERY_FIND_BY_NAME = "User.findByName";
+    public static final String QUERY_FIND_BY_GROUP_NAME = "User.findByGroupName";
+    public static final String QUERY_COUNT_USERS = "User.count";
+    public static final String QUERY_ALL_USERS = "User.all";
+    public static final String NAME_PARAM = "name";
+
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long primaryKey;
 
     @Version
     private int version;
-    
+
     /**
      * User name.
      */
@@ -64,7 +79,7 @@ public class User implements Serializable,
     /**
      * Groups the user belongs to.
      */
-    @ManyToMany
+    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
     private Set<Group> groups;
 
     /**
@@ -107,6 +122,8 @@ public class User implements Serializable,
      * 
      */
     public User(User aUser) {
+        primaryKey  = aUser.primaryKey;
+        version = aUser.version;
         name = aUser.name;
         password = aUser.password;
         groups = new TreeSet<Group>();
@@ -385,7 +402,7 @@ public class User implements Serializable,
     public int compareTo(Object aUser) {
         return name.compareTo(((User) aUser).name);
     }
-    
+
     public Long getPrimaryKey() {
         return primaryKey;
     }