The following is my sources and DDL that generated by Hibernate.
Code:
/**
* User.java
*/
package mo.kudocs.framework.bean;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.hibernate.validator.NotNull;
/**
* User.java
*
* @author Chao Hoi Ka, Eric
*
*/
@Entity
@Table (name = "USER")
@NamedQueries ( {
@NamedQuery (name = "user.findAll", queryString = "select u from User u order by username"),
@NamedQuery (name = "user.findByUsername", queryString = "select u from User u where u.userSecurity.username = :username")
})
public class User extends AbstractObject {
public static final long serialVersionUID = 1L;
protected Status status;
protected UserSecurity userSecurity;
protected UserInfo userInfo;
protected UserPreference userPreferences;
protected Collection<UserGroup> groups = new ArrayList<UserGroup>();
protected Collection<UserRole> roles = new ArrayList<UserRole>();
/**
*
*/
public User() {
super();
}
/**
* @return Returns the status.
*/
@ManyToOne (cascade = {
CascadeType.REFRESH
}, fetch = FetchType.EAGER)
@JoinColumns ( {
@JoinColumn (name = "STATUS_ID")
})
@NotNull
public Status getStatus() {
return this.status;
}
/**
* @param status
* The status to set.
*/
public void setStatus(Status status) {
this.status = status;
}
/**
* @return Returns the groups.
*/
@ManyToMany (fetch = FetchType.EAGER, cascade = {
CascadeType.ALL
}, mappedBy = "users", targetEntity = UserGroup.class)
public Collection<UserGroup> getGroups() {
return this.groups;
}
/**
* @param groups
* The groups to set.
*/
public void setGroups(Collection<UserGroup> groups) {
this.groups = groups;
}
@Transient
public void addGroup(UserGroup userGroup) {
groups.add(userGroup);
}
/**
* @return Returns the userInfo.
*/
@OneToOne (cascade = {
CascadeType.REMOVE
}, fetch = FetchType.EAGER)
@JoinColumns ( {
@JoinColumn (name = "USERINFO_ID")
})
public UserInfo getUserInfo() {
return this.userInfo;
}
/**
* @param userInfo
* The userInfo to set.
*/
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
/**
* @return Returns the roles.
*/
@ManyToMany (fetch = FetchType.EAGER, cascade = {
CascadeType.ALL
}, mappedBy = "users", targetEntity = UserRole.class)
public Collection<UserRole> getRoles() {
return this.roles;
}
/**
* @param roles
* The roles to set.
*/
public void setRoles(Collection<UserRole> roles) {
this.roles = roles;
}
public void addRole(UserRole role) {
roles.add(role);
}
@Transient
public String getIndexText() {
StringBuffer buf = new StringBuffer();
buf.append(id + " ");
buf.append(userInfo.getIndexText() + " ");
return buf.toString();
}
@Transient
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append(super.toString());
buf.append(", " + userSecurity.toString());
return buf.toString();
}
/**
* @return Returns the userSecurity.
*/
@OneToOne (cascade = {
CascadeType.REMOVE
}, fetch = FetchType.EAGER)
@JoinColumns ( {
@JoinColumn (name = "USERSECURITY_ID")
})
public UserSecurity getUserSecurity() {
return this.userSecurity;
}
/**
* @param userSecurity
* The userSecurity to set.
*/
public void setUserSecurity(UserSecurity userSecurity) {
this.userSecurity = userSecurity;
}
/**
* @return Returns the userPreference.
*/
@OneToOne (cascade = {
CascadeType.REMOVE
}, fetch = FetchType.EAGER)
@JoinColumns ( {
@JoinColumn (name = "PREFERENCE_ID")
})
public UserPreference getUserPreferences() {
return this.userPreferences;
}
/**
* @param userPreference The userPreference to set.
*/
public void setUserPreferences(UserPreference userPreferences) {
this.userPreferences = userPreferences;
}
}
Code:
/**
* UserGroup.java
*
*/
package mo.kudocs.framework.bean;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
* UserGroup.java
*
* @author Chao Hoi Ka, Eric
*
*/
@Entity
@Table (name = "USER_GROUP")
@NamedQueries ( {
@NamedQuery (name = "userGroup.findAll", queryString = "select u from UserGroup u"),
@NamedQuery (name = "userGroup.findByName", queryString = "select u from UserGroup u where u.name = :name")
})
public class UserGroup extends AbstractObject {
public static final long serialVersionUID = 1L;
protected String name;
protected String description;
protected Collection<User> users = new ArrayList<User>();
/**
*
*/
public UserGroup() {
super();
}
/**
* @return Returns the description.
*/
@Column
public String getDescription() {
return this.description;
}
/**
* @param description
* The description to set.
*/
public void setDescription(String description) {
this.description = description;
}
/**
* @return Returns the name.
*/
@Column
@PrimaryKeyJoinColumn
public String getName() {
return this.name;
}
/**
* @param name
* The name to set.
*/
public void setName(String name) {
this.name = name;
}
/**
* @return Returns the users.
*/
@ManyToMany (fetch = FetchType.EAGER, targetEntity = User.class, cascade = {
CascadeType.PERSIST, CascadeType.MERGE
})
@JoinTable (table = @Table (name = "USER_GROUP_LINK"), joinColumns = {
@JoinColumn (name = "GROUP_ID")
}, inverseJoinColumns = {
@JoinColumn (name = "USER_ID")
})
public Collection<User> getUsers() {
return this.users;
}
/**
* @param users
* The users to set.
*/
public void setUsers(Collection<User> users) {
this.users = users;
}
@Transient
public void addUser(User user) {
users.add(user);
}
@Transient
public String getIndexText() {
StringBuffer buf = new StringBuffer();
buf.append(name + " " + description);
return buf.toString();
}
}
Code:
/**
* UserRole.java
*
*/
package mo.kudocs.framework.bean;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
* UserRole.java
*
* @author Chao Hoi Ka, Eric
*
*/
@Entity
@Table (name = "USER_ROLE")
@NamedQueries ( {
@NamedQuery (name = "userRole.findAll", queryString = "select u from UserRole u"),
@NamedQuery (name = "userRole.findByName", queryString = "select u from UserRole u where u.name = :name")
})
public class UserRole extends AbstractObject {
public static final long serialVersionUID = 1L;
protected String name;
protected String description;
protected Collection<User> users = new ArrayList<User>();
/**
*
*/
public UserRole() {
super();
}
/**
* @return Returns the description.
*/
@Column
public String getDescription() {
return this.description;
}
/**
* @param description
* The description to set.
*/
public void setDescription(String description) {
this.description = description;
}
/**
* @return Returns the name.
*/
@Column
public String getName() {
return this.name;
}
/**
* @param name
* The name to set.
*/
public void setName(String name) {
this.name = name;
}
/**
* @return Returns the users.
*/
@ManyToMany (fetch = FetchType.EAGER, targetEntity = User.class, cascade = {
CascadeType.ALL
})
@JoinTable (table = @Table (name = "USER_ROLE_LINK"), joinColumns = {
@JoinColumn (name = "ROLE_ID")
}, inverseJoinColumns = {
@JoinColumn (name = "USER_ID")
})
public Collection<User> getUsers() {
return this.users;
}
/**
* @param users
* The users to set.
*/
public void setUsers(Collection<User> users) {
this.users = users;
}
@Transient
public void addUser(User user) {
users.add(user);
}
@Transient
public String getIndexText() {
StringBuffer buf = new StringBuffer();
buf.append(name + " " + description);
return buf.toString();
}
@Transient
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append(super.toString());
buf.append(" ");
buf.append(getIndexText());
return buf.toString();
}
}
The following is the MySQL DDL:
Code:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL auto_increment,
`createDate` datetime default NULL,
`updateDate` datetime default NULL,
`USERINFO_ID` bigint(20) default NULL,
`STATUS_ID` bigint(20) default NULL,
`USERSECURITY_ID` bigint(20) default NULL,
`PREFERENCE_ID` bigint(20) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `PREFERENCE_ID` (`PREFERENCE_ID`),
UNIQUE KEY `USERINFO_ID` (`USERINFO_ID`),
UNIQUE KEY `USERSECURITY_ID` (`USERSECURITY_ID`),
KEY `FK27E3CBBE8B07AB` (`USERSECURITY_ID`),
KEY `FK27E3CB1CF0896B` (`USERINFO_ID`),
KEY `FK27E3CBBDF1CF76` (`PREFERENCE_ID`),
KEY `FK27E3CB57FB9EEB` (`STATUS_ID`),
CONSTRAINT `FK27E3CB1CF0896B` FOREIGN KEY (`USERINFO_ID`) REFERENCES `user_info` (`id`),
CONSTRAINT `FK27E3CB57FB9EEB` FOREIGN KEY (`STATUS_ID`) REFERENCES `status` (`id`),
CONSTRAINT `FK27E3CBBDF1CF76` FOREIGN KEY (`PREFERENCE_ID`) REFERENCES `user_preference` (`id`),
CONSTRAINT `FK27E3CBBE8B07AB` FOREIGN KEY (`USERSECURITY_ID`) REFERENCES `user_security` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Code:
CREATE TABLE `user_group` (
`id` bigint(20) NOT NULL auto_increment,
`createDate` datetime default NULL,
`updateDate` datetime default NULL,
`name` varchar(255) default NULL,
`description` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Code:
CREATE TABLE `user_role` (
`id` bigint(20) NOT NULL auto_increment,
`createDate` datetime default NULL,
`updateDate` datetime default NULL,
`name` varchar(255) default NULL,
`description` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Code:
CREATE TABLE `user_group_link` (
`GROUP_ID` bigint(20) NOT NULL,
`USER_ID` bigint(20) NOT NULL,
KEY `FK7CF33ACE67564C8B` (`USER_ID`),
KEY `FK7CF33ACEC634CC3E` (`GROUP_ID`),
CONSTRAINT `FK7CF33ACE67564C8B` FOREIGN KEY (`USER_ID`) REFERENCES `user` (`id`),
CONSTRAINT `FK7CF33ACEC634CC3E` FOREIGN KEY (`GROUP_ID`) REFERENCES `user_group` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Code:
CREATE TABLE `user_role_link` (
`ROLE_ID` bigint(20) NOT NULL,
`USER_ID` bigint(20) NOT NULL,
KEY `FK7A619EAF67564C8B` (`USER_ID`),
KEY `FK7A619EAF70484A96` (`ROLE_ID`),
CONSTRAINT `FK7A619EAF67564C8B` FOREIGN KEY (`USER_ID`) REFERENCES `user` (`id`),
CONSTRAINT `FK7A619EAF70484A96` FOREIGN KEY (`ROLE_ID`) REFERENCES `user_role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8