Raible's Wiki

Raible Designs
Wiki Home
News
Recent Changes

AppFuse

Homepage
  - Korean
  - Chinese
  - Italian
  - Japanese

QuickStart Guide
  - Chinese
  - French
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish
  - Japanese

User Guide
  - Korean
  - Chinese

Tutorials
  - Chinese
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish

FAQ
  - Korean

Latest Downloads

Other Applications

Struts Resume
Security Example
Struts Menu

Set your name in
UserPreferences


Referenced by
Articles
Articles_cn
Articles_de
Articles_pt
Articles_zh
HibernateRelationshi...




JSPWiki v2.2.33

[RSS]


Hide Menu

HibernateRelationships


This is version 44. It is not the current version, and thus it cannot be edited.
[Back to current version]   [Restore this version]


About this tutorial

This is a tutorial to show how to create and manage Hibernate relationships within AppFuse. This tutorial was written for AppFuse 1.8 and the AppGen pieces may not work with previous versions.
For further details about the specifics regarding creating entities, XDoclet tags for Hibernate, DAO development, etc., please refer to Creating new DAOs and Objects in AppFuse.

Table of Contents

  • [1] Create Weblog.java, Entry.java and add XDoclet tags
  • [2] [Many-to-One] Create a new Category object and modify Entry.java to use it
  • [3] [One-to-Many] A Weblog object can have many Entries
  • [4] [Many-to-Many] ???
  • [5] Lazy-Loading Issues
  • [6] Managing relationships and indexed properties in the UI

Create Weblog.java, Entry.java and add XDoclet tags [#1]

For our purposes, the Weblog entity is a list of available weblogs. A “Weblog” object has the following properties – an id, a username (for the user who created the blog), a dateCreated, and a blogTitle. Every Entry object has an id, a text, and a timeCreated property. The first thing to do is create some objects to persist. Let's create both a "Weblog" object and an “Entry” object (in the src/dao/**/model directory). Basic XDoclet tags for these entities are show as well.


package org.appfuse.model;

import java.util.Date;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @hibernate.class table="weblog"
 */
public class Weblog extends BaseObject {

  private Long weblogId;
  private String username;
  private Date dateCreated;
  private String blogTitle;
  private Integer version;

  /**
   @return Returns the blogTitle.
   
   * @hibernate.property column="blog_title"
   */
  public String getBlogTitle() {
    return blogTitle;
  }

  /**
   @param blogTitle
   *            The blogTitle to set.
   */
  public void setBlogTitle(String blogTitle) {
    this.blogTitle = blogTitle;
  }

  /**
   @return Returns the dateCreated.
   
   * @hibernate.property column="date_created"
   */
  public Date getDateCreated() {
    return dateCreated;
  }

  /**
   @param dateCreated
   *            The dateCreated to set.
   */
  public void setDateCreated(Date dateCreated) {
    this.dateCreated = dateCreated;
  }

  /**
   @return Returns the id.
   
   * @hibernate.id column="weblog_id" generator-class="native"
   *               unsaved-value="null"
   */
  public Long getWeblogId() {
    return weblogId;
  }

  /**
   @param id
   *            The id to set.
   */
  public void setWeblogId(Long weblogId) {
    this.weblogId = weblogId;
  }

  /**
   @return Returns the username.
   
   * @hibernate.property column="username"
   */
  public String getUsername() {
    return username;
  }

  /**
   @param username
   *            The username to set.
   */
  public void setUsername(String username) {
    this.username = username;
  }

  /**
   @return Returns the version.
   
   * @hibernate.version
   */
  public Integer getVersion() {
    return version;
  }

  /**
   @param version
   *            The version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof Weblog)) {
      return false;
    }
    Weblog rhs = (Weblogobject;
    return new EqualsBuilder().append(this.blogTitle, rhs.blogTitle)
        .append(this.username, rhs.username).append(this.dateCreated,
            rhs.dateCreated).append(this.weblogId, rhs.weblogId).append(
            this.version, rhs.version).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(2066507029, -390167195).append(
        this.blogTitle).append(this.username).append(this.dateCreated)
        .append(this.weblogId).append(this.version).toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("id"this.weblogId).append("version"this.version).append(
            "username"this.username).append("blogTitle",
            this.blogTitle).append("dateCreated"this.dateCreated)
        .toString();
  }
}


package org.appfuse.model;

import java.util.Date;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @hibernate.class table="entry"
 */



public class Entry extends BaseObject {

  private Long id;
  private String text;
  private Date timeCreated;
  private Integer version;

  /*
   * Generate your getters and setters using your favorite IDE: In Eclipse:
   * Right-click -> Source -> Generate Getters and Setters
   */

  /**
   @return Returns the id.
   
   * @hibernate.id column="entry_id" generator-class="native"
   *               unsaved-value="null"
   */
  public Long getEntryId() {
    return entryId;
  }

  /**
   @param id
   *            The id to set.
   */
  public void setEntryId(Long entryId) {
    this.entryId = entryId;
  }

  /**
   @return Returns the text.
   
   * @hibernate.property column="entry_text"
   */
  public String getText() {
    return text;
  }

  /**
   @param text
   *            The text to set.
   */
  public void setText(String text) {
    this.text = text;
  }

  /**
   @return Returns the timeCreated.
   
   * @hibernate.property column="time_created"
   */
  public Date getTimeCreated() {
    return timeCreated;
  }

  /**
   @param timeCreated
   *            The timeCreated to set.
   */
  public void setTimeCreated(Date timeCreated) {
    this.timeCreated = timeCreated;
  }

  /**
   @return Returns the version.
   
   * @hibernate.version
   */
  public Integer getVersion() {

    return version;
  }

  /**
   @param version
   *            The version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof Entry)) {
      return false;
    }
    Entry rhs = (Entryobject;
    return new EqualsBuilder().append(this.text, rhs.text).append(
        this.timeCreated, rhs.timeCreated).append(this.id, rhs.id)
        .append(this.version, rhs.version).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(-880342185, -1668369001).append(this.text)
        .append(this.timeCreated).append(this.id).append(this.version)
        .toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("text"this.text).append("id"this.id).append(
            "version"this.version).append("timeCreated",
            this.timeCreated).toString();
  }
}

[Many-to-One] Create a new Category object and modify Entry.java to use it [#2]

A category object will act as an entity for persisting category information about weblog entries. A category object will consist of an id (primary key), category name, and a description. Each category can have many entries.


package org.appfuse.model;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @hibernate.class table="category"
 */
public class Category extends BaseObject {

  private Long id;
  private String categoryName;
  private String categoryDescription;
  private Integer version;

  /**
   @return Returns the categoryDescription.
   
   * @hibernate.property column="category_description"
   */
  public String getCategoryDescription() {
    return categoryDescription;
  }

  /**
   @param categoryDescription
   *            The categoryDescription to set.
   */
  public void setCategoryDescription(String categoryDescription) {
    this.categoryDescription = categoryDescription;
  }

  /**
   @return Returns the categoryName.
   
   * @hibernate.property column="category_name"
   */
  public String getCategoryName() {
    return categoryName;
  }

  /**
   @param categoryName
   *            The categoryName to set.
   */
  public void setCategoryName(String categoryName) {
    this.categoryName = categoryName;
  }

  /**
   @return Returns the id.
   
   * @hibernate.id column="category_id" generator-class="native"
   *               unsaved-value="null"
   */
  public Long getId() {
    return id;
  }

  /**
   @param id
   *            The id to set.
   */
  public void setId(Long id) {
    this.id = id;
  }

  /**
   @return Returns the version.
   
   * @hibernate.version
   */
  public Integer getVersion() {
    return version;
  }

  /**
   @param version
   *            The version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof Category)) {
      return false;
    }
    Category rhs = (Categoryobject;
    return new EqualsBuilder().append(this.categoryDescription,
        rhs.categoryDescription).append(this.categoryName,
        rhs.categoryName).append(this.id, rhs.id).append(this.version,
        rhs.version).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(-837614407, -1874103513).append(
        this.categoryDescription).append(this.categoryName).append(
        this.id).append(this.version).toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("id"this.id)
        .append("categoryName"this.categoryName).append("version",
            this.version).append("categoryDescription",
            this.categoryDescription).toString();
  }
}

The many-to-one relationship between entry and category can be established by the entity classes. Hibernate relatioships can typically be established on either side of the relationship or as a bi-directional one as well. For our purposes,this relationship will be maintained by an extra property and collection held by Entry.


package org.appfuse.model;

import java.util.Date;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @hibernate.class table="entry"
 */
public class Entry extends BaseObject {

  private Long entryId;
  private String text;
  private Date timeCreated;
  private Integer version;
  private Long categoryId;
  private Category category;

  /*
   * Generate your getters and setters using your favorite IDE: In Eclipse:
   * Right-click -> Source -> Generate Getters and Setters
   */

  /**
   @return Returns the category.
   
   * @hibernate.many-to-one insert="false" update="false" cascade="none"
   *                        column="category_id" outer-join="true"
   */
  public Category getCategory() {
    return category;
  }



  /**
   @param category
   *            The category to set.
   */
  public void setCategory(Category category) {
    this.category = category;
  }

  /**
   @return Returns the categoryId.
   
   * @hibernate.property column="category_id"
   */
  public Long getCategoryId() {
    return categoryId;
  }

  /**
   @param categoryId
   *            The categoryId to set.
   *  
   */
  public void setCategoryId(Long categoryId) {
    this.categoryId = categoryId;
  }

  /**
   @return Returns the id.
   
   * @hibernate.id column="entry_id" generator-class="native"
   *               unsaved-value="null"
   */
  public Long getEntryId() {
    return entryId;
  }

  /**
   @param id
   *            The id to set.
   */
  public void setEntryId(Long entryId) {
    this.entryId = entryId;
  }

  /**
   @return Returns the text.
   
   * @hibernate.property column="entry_text"
   */
  public String getText() {
    return text;
  }

  /**
   @param text
   *            The text to set.
   */
  public void setText(String text) {
    this.text = text;
  }

  /**
   @return Returns the timeCreated.
   
   * @hibernate.property column="time_created"
   */
  public Date getTimeCreated() {
    return timeCreated;
  }

  /**
   @param timeCreated
   *            The timeCreated to set.
   */
  public void setTimeCreated(Date timeCreated) {
    this.timeCreated = timeCreated;
  }

  /**
   @return Returns the version.
   
   * @hibernate.version
   */
  public Integer getVersion() {
    return version;
  }

  /**
   @param version
   *            The version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof Entry)) {
      return false;
    }
    Entry rhs = (Entryobject;
    return new EqualsBuilder().append(this.text, rhs.text).append(
        this.timeCreated, rhs.timeCreated).append(this.category,
        rhs.category).append(this.entryId, rhs.entryId).append(
        this.categoryId, rhs.categoryId).append(this.version,
        rhs.version).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(8350565871192670387).append(this.text)
        .append(this.timeCreated).append(this.category).append(
            this.entryId).append(this.categoryId).append(
            this.version).toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("text"this.text).append("entryId"this.entryId)
        .append("version"this.version).append("categoryId",
            this.categoryId).append("category"this.category)
        .append("timeCreated"this.timeCreated).toString();
  }
}

[One-to-Many] A Weblog object can have many Entries [#3]

Modify the Weblog object and Entry object to represent the multiplicity of a weblog can have many entries. This relationship ship is set on the Weblog class using a list. Hibernate tags are used to establish this relationship using a bag as the Hibernate collection type.


package org.appfuse.model;

import java.util.Date;

import java.util.List;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @hibernate.class table="weblog"
 */
public class Weblog extends BaseObject {

  private Long weblogId;
  private String username;
  private Date dateCreated;
  private String blogTitle;
  private Integer version;
  private List entries;

  /**
   @return Returns the blogTitle.
   
   * @hibernate.property column="blog_title"
   */
  public String getBlogTitle() {
    return blogTitle;
  }

  /**
   @param blogTitle
   *            The blogTitle to set.
   */
  public void setBlogTitle(String blogTitle) {
    this.blogTitle = blogTitle;
  }

  /**
   @return Returns the dateCreated.
   
   * @hibernate.property column="date_created"
   */
  public Date getDateCreated() {
    return dateCreated;
  }

  /**
   @param dateCreated
   *            The dateCreated to set.
   */
  public void setDateCreated(Date dateCreated) {
    this.dateCreated = dateCreated;
  }

  /**
   @return Returns the entries.
   
   * @hibernate.bag name="entries" lazy="true" inverse="true"
     *  cascade="delete"
   * @hibernate.collection-key column="entry_id"
     * @hibernate.collection-one-to-many
     *  class="org.appfuse.model.Entry"
   */
  public List getEntries() {
    return entries;
  }

  /**
   @param entries
   *            The entries to set.
   */
  public void setEntries(List entries) {
    this.entries = entries;
  }

  /**
   @return Returns the id.
   
   * @hibernate.id column="weblog_id" generator-class="native"
   *               unsaved-value="null"
   */
  public Long getWeblogId() {
    return weblogId;
  }

  /**
   @param id
   *            The id to set.
   */
  public void setWeblogId(Long weblogId) {
    this.weblogId = weblogId;
  }

  /**
   @return Returns the username.
   
   * @hibernate.property column="username"
   */
  public String getUsername() {
    return username;
  }

  /**
   @param username
   *            The username to set.
   */
  public void setUsername(String username) {
    this.username = username;
  }

  /**
   @return Returns the version.
   
   * @hibernate.version
   */
  public Integer getVersion() {
    return version;
  }

  /**
   @param version
   *            The version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof Weblog)) {
      return false;
    }
    Weblog rhs = (Weblogobject;
    return new EqualsBuilder().append(this.blogTitle, rhs.blogTitle)
        .append(this.weblogId, rhs.weblogId).append(this.username,
            rhs.username).append(this.entries, rhs.entries).append(
            this.dateCreated, rhs.dateCreated).append(this.version,
            rhs.version).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(-1412256665, -696169811).append(
        this.blogTitle).append(this.weblogId).append(this.username)
        .append(this.entries).append(this.dateCreated).append(
            this.version).toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("weblogId"this.weblogId).append("version",
            this.version).append("username"this.username).append(
            "blogTitle"this.blogTitle).append("entries",
            this.entries).append("dateCreated"this.dateCreated)
        .toString();
  }
}

The Entry class is modified slightly to provide a placeholder for the relationships between Weblog and Entry.


package org.appfuse.model;

import java.util.Date;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @hibernate.class table="entry"
 */
public class Entry extends BaseObject {

  private Long entryId;
  private String text;
  private Date timeCreated;
  private Integer version;
  private Category category;
  private Long categoryId;


  private Long weblogId;

  /*
   * Generate your getters and setters using your favorite IDE: In Eclipse:
   * Right-click -> Source -> Generate Getters and Setters
   */

  /**
   @return Returns the category.
   
   * @hibernate.many-to-one insert="false" update="false" cascade="none"
   *                        column="category_id" outer-join="true"
   */
  public Category getCategory() {
    return category;
  }

  /**
   @param category
   *            The category to set.
   */
  public void setCategory(Category category) {
    this.category = category;
  }

  /**
   @return Returns the categoryId.
   
   * @hibernate.property column="category_id"
   */
  public Long getCategoryId() {
    return categoryId;
  }

  /**
   @param categoryId
   *            The categoryId to set.
   *  
   */
  public void setCategoryId(Long categoryId) {
    this.categoryId = categoryId;
  }

  /**
   @return Returns the id.
   
   * @hibernate.id column="entry_id" generator-class="native"
   *               unsaved-value="null"
   */
  public Long getEntryId() {
    return entryId;
  }

  /**
   @param id
   *            The id to set.
   */
  public void setEntryId(Long entryId) {
    this.entryId = entryId;
  }

  /**
   @return Returns the text.
   
   * @hibernate.property column="entry_text"
   */
  public String getText() {
    return text;
  }

  /**
   @param text
   *            The text to set.
   */
  public void setText(String text) {
    this.text = text;
  }

  /**
   @return Returns the timeCreated.
   
   * @hibernate.property column="time_created"
   */
  public Date getTimeCreated() {
    return timeCreated;
  }

  /**
   @param timeCreated
   *            The timeCreated to set.
   */
  public void setTimeCreated(Date timeCreated) {
    this.timeCreated = timeCreated;
  }

  /**
   @return Returns the version.
   
   * @hibernate.version
   */
  public Integer getVersion() {
    return version;
  }

  /**
   @param version
   *            The version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @return Returns the weblogId.
   
   * @hibernate.property column="weblog_id"
   */
  public Long getWeblogId() {
    return weblogId;
  }

  /**
   @param weblogId
   *            The weblogId to set.
   */
  public void setWeblogId(Long weblogId) {
    this.weblogId = weblogId;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof Entry)) {
      return false;
    }
    Entry rhs = (Entryobject;
    return new EqualsBuilder().append(this.text, rhs.text).append(
        this.timeCreated, rhs.timeCreated).append(this.weblogId,
        rhs.weblogId).append(this.category, rhs.category).append(
        this.entryId, rhs.entryId).append(this.categoryId,
        rhs.categoryId).append(this.version, rhs.version).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(-1879789101535224049).append(this.text)
        .append(this.timeCreated).append(this.weblogId).append(
            this.category).append(this.entryId).append(
            this.categoryId).append(this.version).toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("weblogId"this.weblogId).append("text"this.text)
        .append("entryId"this.entryId)
        .append("version"this.version).append("categoryId",
            this.categoryId).append("category"this.category)
        .append("timeCreated"this.timeCreated).toString();
  }
}

[Many-to-Many] ??? [#4]

The Weblog system that we are developing allows one additional bit of functionality. A particular Weblog can have many Users. Basically the idea is of a shared weblog that is a place where many users can express themselves about a particular topic of interest. For this bit of functionality the User object will be modified to have a many-to-many relationship with Weblog.

Weblog modifications:


package org.appfuse.model;

import java.util.Date;

import java.util.List;
import java.util.HashSet;
import java.util.Set;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @hibernate.class table="weblog"
 */
public class Weblog extends BaseObject {

  private Long weblogId;
  private String username;
  private Date dateCreated;
  private String blogTitle;
  private Integer version;
  private List entries;
  private Set users = new HashSet();

  /**
   @return Returns the blogTitle.
   
   * @hibernate.property column="blog_title"
   */
  public String getBlogTitle() {
    return blogTitle;
  }

  /**
   @param blogTitle
   *            The blogTitle to set.
   */
  public void setBlogTitle(String blogTitle) {
    this.blogTitle = blogTitle;
  }

  /**
   @return Returns the dateCreated.
   
   * @hibernate.property column="date_created"
   */
  public Date getDateCreated() {
    return dateCreated;
  }

  /**
   @param dateCreated
   *            The dateCreated to set.
   */
  public void setDateCreated(Date dateCreated) {
    this.dateCreated = dateCreated;
  }

  /**
   @return Returns the entries.
   
   * @hibernate.bag name="entries" lazy="true" inverse="true" cascade="delete"
   * @hibernate.collection-key column="entry_id"
   * @hibernate.collection-one-to-many class="org.appfuse.model.Entry"
   */
  public List getEntries() {
    return entries;
  }

  /**
   @param entries
   *            The entries to set.
   */
  public void setEntries(List entries) {
    this.entries = entries;
  }

  /**
   @return Returns the id.
   
   * @hibernate.id column="weblog_id" generator-class="native"
   *               unsaved-value="null"
   */
  public Long getWeblogId() {
    return weblogId;
  }

  /**
   @param id
   *            The id to set.
   */
  public void setWeblogId(Long weblogId) {
    this.weblogId = weblogId;
  }

  /**
   @return Returns the username.
   
   * @hibernate.property column="username"
   */
  public String getUsername() {
    return username;
  }

  /**
   @param username
   *            The username to set.
   */
  public void setUsername(String username) {
    this.username = username;
  }

  /**
   @return Returns the users.
   
   * @hibernate.set table="weblog_user" cascade="save-update" lazy="false"
   * @hibernate.collection-key column="weblog_id"
   * @hibernate.collection-many-to-many class="org.appfuse.model.User"
   *                                    column="username"
   */
  public Set getUsers() {
    return users;
  }

  /**
   * Adds a user for the weblog
   
   @param rolename
   */
  public void addUser(User user) {
    getUsers().add(user);
  }

  /**
   @param users
   *            The users to set.
   */
  public void setUsers(Set users) {
    this.users = users;
  }

  /**
   @return Returns the version.
   
   * @hibernate.version
   */
  public Integer getVersion() {
    return version;
  }

  /**
   @param version
   *            The version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof Weblog)) {
      return false;
    }
    Weblog rhs = (Weblogobject;
    return new EqualsBuilder().append(this.users, rhs.users).append(
        this.blogTitle, rhs.blogTitle).append(this.weblogId,
        rhs.weblogId).append(this.username, rhs.username).append(
        this.entries, rhs.entries).append(this.dateCreated,
        rhs.dateCreated).append(this.version, rhs.version).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(11492730151751732143).append(this.users)
        .append(this.blogTitle).append(this.weblogId).append(
            this.username).append(this.entries).append(
            this.dateCreated).append(this.version).toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("weblogId"this.weblogId).append("version",
            this.version).append("users"this.users).append(
            "username"this.username).append("blogTitle",
            this.blogTitle).append("entries"this.entries).append(
            "dateCreated"this.dateCreated).toString();
  }
}

User modifications


package org.appfuse.model;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * User class
 
 * This class is used to generate Spring Validation rules as well as the
 * Hibernate mapping file.
 
 <p>
 * <a href="User.java.html"> <i>View Source </i> </a>
 </p>
 
 @author <a href="mailto:[email protected]">Matt Raible </a> Updated by
 *         Dan Kibler ([email protected])
 
 * @hibernate.class table="app_user"
 */
public class User extends BaseObject implements Serializable {
  protected String username;
  protected String password;
  protected String confirmPassword;
  protected String firstName;
  protected String lastName;
  protected Address address = new Address();
  protected String phoneNumber;
  protected String email;
  protected String website;
  protected String passwordHint;
  protected Integer version;
  protected Boolean enabled;
  protected Set roles = new HashSet();
  protected Set weblogs;

  /**
   * Returns the username.
   
   @return String
   
   * @hibernate.id column="username" length="20" generator-class="assigned"
   *               unsaved-value="version"
   */
  public String getUsername() {
    return username;
  }

  /**
   * Returns the password.
   
   @return String
   
   * @hibernate.property column="password" not-null="true"
   */
  public String getPassword() {
    return password;
  }

  /**
   * Returns the confirmedPassword.
   
   @return String
   */
  public String getConfirmPassword() {
    return confirmPassword;
  }

  /**
   * Returns the firstName.
   
   @return String
   
   * @hibernate.property column="first_name" not-null="true" length="50"
   */
  public String getFirstName() {
    return firstName;
  }

  /**
   * Returns the lastName.
   
   @return String
   
   * @hibernate.property column="last_name" not-null="true" length="50"
   */
  public String getLastName() {
    return lastName;
  }

  public String getFullName() {
    return firstName + ' ' + lastName;
  }

  /**
   * Returns the address.
   
   @return Address
   
   * @hibernate.component
   */
  public Address getAddress() {
    return address;
  }

  /**
   * Returns the email. This is an optional field for specifying a different
   * e-mail than the username.
   
   @return String
   
   * @hibernate.property name="email" not-null="true" unique="true"
   */
  public String getEmail() {
    return email;
  }

  /**
   * Returns the phoneNumber.
   
   @return String
   
   * @hibernate.property column="phone_number" not-null="false"
   */
  public String getPhoneNumber() {
    return phoneNumber;
  }

  /**
   * Returns the website.
   
   @return String
   
   * @hibernate.property column="website" not-null="false"
   */
  public String getWebsite() {
    return website;
  }

  /**
   * Returns the passwordHint.
   
   @return String
   
   * @hibernate.property column="password_hint" not-null="false"
   */
  public String getPasswordHint() {
    return passwordHint;
  }

  /**
   * Returns the user's roles.
   
   @return Set
   
   * @hibernate.set table="user_role" cascade="save-update" lazy="false"
   * @hibernate.collection-key column="username"
   * @hibernate.collection-many-to-many class="org.appfuse.model.Role"
   *                                    column="role_name"
   */
  public Set getRoles() {
    return roles;
  }

  /**
   * Adds a role for the user
   
   @param rolename
   */
  public void addRole(Role role) {
    getRoles().add(role);
  }

  /**
   * Sets the username.
   
   @param username
   *            The username to set
   * @spring.validator type="required"
   */
  public void setUsername(String username) {
    this.username = username;
  }

  /**
   * Sets the password.
   
   @param password
   *            The password to set
   
   * @spring.validator type="required"
   * @spring.validator type="twofields" msgkey="errors.twofields"
   * @spring.validator-args arg1resource="user.password"
   * @spring.validator-args arg1resource="user.confirmPassword"
   * @spring.validator-var name="secondProperty" value="confirmPassword"
   */
  public void setPassword(String password) {
    this.password = password;
  }

  /**
   * Sets the confirmedPassword.
   
   @param confirmPassword
   *            The confirmed password to set
   * @spring.validator type="required"
   */
  public void setConfirmPassword(String confirmPassword) {
    this.confirmPassword = confirmPassword;
  }

  /**
   * Sets the firstName.
   
   * @spring.validator type="required"
   @param firstName
   *            The firstName to set
   */
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  /**
   * Sets the lastName.
   
   @param lastName
   *            The lastName to set
   
   * @spring.validator type="required"
   */
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  /**
   * Sets the address.
   
   @param address
   *            The address to set
   
   * @spring.validator
   */
  public void setAddress(Address address) {
    this.address = address;
  }

  /**
   * Sets the email.
   
   @param email
   *            The email to set
   
   * @spring.validator type="required"
   * @spring.validator type="email"
   */
  public void setEmail(String email) {
    this.email = email;
  }

  /**
   * Sets the phoneNumber.
   
   @param phoneNumber
   *            The phoneNumber to set
   
   * @spring.validator type="mask" msgkey="errors.phone"
   * @spring.validator-var name="mask" value="${phone}"
   */
  public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
  }

  /**
   * Sets the website.
   
   @param website
   *            The website to set
   */
  public void setWebsite(String website) {
    this.website = website;
  }

  /**
   @param passwordHint
   *            The password hint to set
   
   * @spring.validator type="required"
   */
  public void setPasswordHint(String passwordHint) {
    this.passwordHint = passwordHint;
  }

  /**
   * Sets the roles.
   
   @param roles
   *            The roles to set
   */
  public void setRoles(Set roles) {
    this.roles = roles;
  }

  /**
   @return Returns the updated timestamp.
   * @hibernate.version
   */
  public Integer getVersion() {
    return version;
  }

  /**
   @param updated
   *            The updated version to set.
   */
  public void setVersion(Integer version) {
    this.version = version;
  }

  /**
   @return Returns the weblogs.
   */
  public Set getWeblogs() {
    return weblogs;
  }

  /**
   @param weblogs
   *            The weblogs to set.
   */
  public void setWeblogs(Set weblogs) {
    this.weblogs = weblogs;
  }

  /**
   @return Returns the enabled.
   * @hibernate.property column="enabled"
   */
  public Boolean getEnabled() {
    return enabled;
  }

  /**
   @param enabled
   *            The enabled to set.
   */
  public void setEnabled(Boolean enabled) {
    this.enabled = enabled;
  }

  /**
   * Convert user roles to LabelValue objects for convenience.
   */
  public List getRoleList() {
    List userRoles = new ArrayList();

    if (this.roles != null) {
      for (Iterator it = roles.iterator(); it.hasNext();) {
        Role role = (Roleit.next();

        // convert the user's roles to LabelValue Objects
        userRoles.add(new LabelValue(role.getName(), role.getName()));
      }
    }

    return userRoles;
  }

  /**
   @see java.lang.Object#equals(Object)
   */
  public boolean equals(Object object) {
    if (!(object instanceof User)) {
      return false;
    }
    User rhs = (Userobject;
    return new EqualsBuilder().append(this.password, rhs.password).append(
        this.passwordHint, rhs.passwordHint).append(this.address,
        rhs.address).append(this.roles, rhs.roles).append(
        this.firstName, rhs.firstName).append(this.lastName,
        rhs.lastName).append(this.version, rhs.version).append(
        this.weblogs, rhs.weblogs).append(this.enabled, rhs.enabled)
        .append(this.confirmPassword, rhs.confirmPassword).append(
            this.username, rhs.username).append(this.email,
            rhs.email).append(this.phoneNumber, rhs.phoneNumber)
        .append(this.website, rhs.website).isEquals();
  }

  /**
   @see java.lang.Object#hashCode()
   */
  public int hashCode() {
    return new HashCodeBuilder(-1892187061, -1292517047).append(
        this.password).append(this.passwordHint).append(this.address)
        .append(this.roles).append(this.firstName)
        .append(this.lastName).append(this.version)
        .append(this.weblogs).append(this.enabled).append(
            this.confirmPassword).append(this.username).append(
            this.email).append(this.phoneNumber).append(
            this.website).toHashCode();
  }

  /**
   @see java.lang.Object#toString()
   */
  public String toString() {
    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("roles"this.roles).append("enabled"this.enabled)
        .append("firstName"this.firstName).append("lastName",
            this.lastName)
        .append("passwordHint"this.passwordHint).append("version",
            this.version).append("username"this.username).append(
            "weblogs"this.weblogs).append("fullName",
            this.getFullName()).append("email"this.email).append(
            "phoneNumber"this.phoneNumber).append("password",
            this.password).append("address"this.address).append(
            "confirmPassword"this.confirmPassword).append(
            "roleList"this.getRoleList()).append("website",
            this.website).toString();
  }
}

DAO Stuff

WeblogDaoTest

WeblogDAO

WeblogDAOHibernate

Sample Data

Add some sample data to /metadata/sql/sample-data.xml.

<table name='weblog'>
	<column>weblog_id</column>
	<column>blog_title</column>
	<column>date_created</column>
	<column>username</column>
	<column>version</column>
	<row>
		<value>1</value>
		<value><![CDATA[Sponge Bob is Cool]]></value>
		<value>2004-03-31</value>
		<value>tomcat</value>
		<value>1</value>
	</row>
	<row>
		<value>2</value>
		<value><![CDATA[Java Development = Fun]]></value>
		<value>2005-01-05</value>
		<value>mraible</value>
		<value>1</value>
	</row>
</table>
<table name='weblog_user'>
	<column>weblog_id</column>
	<column>username</column>
	<row>
		<value>1</value>
		<value>tomcat</value>
	</row>
	<row>
		<value>1</value>
		<value>mraible</value>
	</row>
	<row>
		<value>2</value>
		<value>mraible</value>
	</row>
</table>

applicationContext-hibernate.xml

Lazy-Loading Issues [#5]

Managing relationships and indexed properties in the UI [#6]


Attachments:
Category.java Info on Category.java 1985 bytes
Entry.java Info on Entry.java 1947 bytes
Weblog.java Info on Weblog.java 2066 bytes
ER-Diagram.jpg Info on ER-Diagram.jpg 31720 bytes
LazyDAOTests.diff Info on LazyDAOTests.diff 4070 bytes


Go to top   More info...   Attach file...
This particular version was published on 06-Nov-2006 13:52:44 MST by RanceShields.