*/
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
*/
@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.
*/
/**
* Groups the user belongs to.
*/
- @ManyToMany
+ @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
private Set<Group> groups;
/**
*
*/
public User(User aUser) {
+ primaryKey = aUser.primaryKey;
+ version = aUser.version;
name = aUser.name;
password = aUser.password;
groups = new TreeSet<Group>();
public int compareTo(Object aUser) {
return name.compareTo(((User) aUser).name);
}
-
+
public Long getPrimaryKey() {
return primaryKey;
}