Now working with both hibernate and eclipselink
[utils] / security / impl / src / main / java / org / wamblee / usermgt / User.java
index 8bccfabad6ca0435a30e1ae5b40ba096d53c1b8c..0e1c545394a7d0031c067c8f8fcf92d9a7a7f9eb 100644 (file)
  */
 package org.wamblee.usermgt;
 
-import org.wamblee.security.AbstractPersistent;
-import org.wamblee.security.encryption.MessageDigester;
-
-import org.wamblee.usermgt.UserMgtException.Reason;
-
 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;
 
+import org.wamblee.security.encryption.MessageDigester;
+import org.wamblee.usermgt.UserMgtException.Reason;
+
 /**
  * Represents a user. The methods for managing the groups of the user have
  * package scope. Managing the groups of the user should be done through the
@@ -41,16 +42,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 +76,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 +119,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>();
@@ -342,6 +356,9 @@ public class User implements Serializable,
      */
     @Override
     public boolean equals(Object aUser) {
+        if (aUser == null) {
+            return false;
+        }
         if (!(aUser instanceof User)) {
             return false;
         }
@@ -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;
     }