-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 
Author Message
 Post subject: org.hibernate.NonUniqueObjectException
PostPosted: Wed Nov 09, 2005 1:51 am 
Regular
Regular

Joined: Tue Nov 04, 2003 12:37 pm
Posts: 57
Hello,

Why it will cause NonUniqueObjectException in my codes?

In the following code, if I remove "ur1", it runs very well.

But the "ur" and "ur1" are two different objects (the contents), why it will caused the exception ?


Code:
private static void createGuest() throws Exception {
      Session session = null;
      UserDAO userDAO = null;

      try {
         // guest
         User user = null;

         session = HibernateUtil.start();

         userDAO = new UserDAO(session);

         user = (User) userDAO.findByUsername("kudocsguest");

         HibernateUtil.end();

         if (user == null) {

            // retrieve the skinID
            long skinID = SkinManager.getDefaultSkin().getId();            

            user = new User();

            // user.setId(SystemCounterDAO.nextId(GlobalConstant.USER_COUNTER));
            user.setStatus(StatusDAO.ACTIVE());

            // UserSecurity
            UserSecurity us = new UserSecurity();
            // us.setId(SystemCounterDAO.nextId(GlobalConstant.USERSECURITY_COUNTER));
            us.setUsername("kudocsguest");
            // us.setId(SystemCounterDAO.nextId(GlobalConstant.USERSECURITY_COUNTER));
            String seed = Password.getSeed();
            us.setSeed(seed);
            us.setPassword(Password.newCrypt("123456", seed));
            us.setUser(user);
            us.setCheckIp(false);
            user.setUserSecurity(us);

            // UserPreference / PreferenceNode
            UserPreference userPref = new UserPreference();
            PreferenceNode prefNode = new PreferenceNode();

            prefNode.putNode(GlobalConstant.PREFERENCE_SKIN, "" + skinID);
            userPref.addPreferenceNode(prefNode);
            prefNode.setPreferences(userPref);

            userPref.setOwner(user);
            user.setUserPreferences(userPref);

            // UserGroup
            UserGroup ug = UserManager.getGroup("kudocsuser");
            ug.addUser(user);
            user.addGroup(ug);

            // UserRole
            UserRole ur = UserManager.getRole("kudocsguest");
            ur.addUser(user);
            user.addRole(ur);

            UserRole ur1 = UserManager.getRole("kudocsuser");
            ur1.addUser(user);
            user.addRole(ur1);

            // UserInfo
            UserInfo info = new UserInfo();
            // info.setId(SystemCounterDAO.nextId(GlobalConstant.USERINFO_COUNTER));
            info.setFirstName("Guest");
            info.setLastName("Guest");
            info.setSex(GlobalConstant.MALE);
            info.setBirth(DateTimeUtil.formatDate(DateTimeUtil.formatDate(
                  new Date(), "dd/MM/yyyy"), "dd/MM/yyyy"));
            info.setOwner(user);

            // address
            Address addr = new Address();
            // addr.setId(SystemCounterDAO.nextId(GlobalConstant.ADDRESS_COUNTER));
            addr.setStreet1("KuDocs Tower");
            addr.setCity("MACAU S.A.R.");
            addr.setCountry("CHINA PRC");
            addr.setUserInfo(info);

            info.setAddress(addr);
            user.setUserInfo(info);

            session = HibernateUtil.start();

            HibernateUtil.insert(session, us);
            HibernateUtil.insert(session, prefNode);
            HibernateUtil.insert(session, userPref);
            HibernateUtil.insert(session, info);
            HibernateUtil.insert(session, addr);
            HibernateUtil.insert(session, user);

            HibernateUtil.end(true);

            log.info("===== INITIALIZE GUEST =====");
         }
      } catch (Exception e) {
         HibernateUtil.rollback();
         log.error("Create guest failed: ", e);
      } finally {
         HibernateUtil.close();
      }
   }





Code:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [mo.kudocs.framework.bean.UserGroup#2]
   at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:592)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:258)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:216)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
   at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:501)
   at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
   at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
   at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
   at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
   at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
   at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
   at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
   at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
   at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
   at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
   at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:409)
   at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
   at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
   at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
   at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
   at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
   at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:524)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:510)
   at mo.kudocs.framework.util.HibernateUtil.insert(HibernateUtil.java:388)
   at mo.kudocs.framework.servlet.KudocsInitializer.createGuest(KudocsInitializer.java:471)
   at mo.kudocs.framework.servlet.KudocsInitializer.initUsers(KudocsInitializer.java:192)
   at mo.kudocs.framework.servlet.KudocsInitializer.init(KudocsInitializer.java:84)
   at mo.kudocs.framework.servlet.KudocsInitializer.init(KudocsInitializer.java:74)
   at mo.kudocs.framework.servlet.KudocsInitializerListener.contextInitialized(KudocsInitializerListener.java:71)
   at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3669)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4104)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
   at org.apache.catalina.core.StandardService.start(StandardService.java:450)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Nov 09, 2005 3:17 am 
Expert
Expert

Joined: Mon Jul 04, 2005 5:19 pm
Posts: 720
check the docs on the difference between transient state and persistent state. one of those insert statements is probably bringing in a UserGroup instance into persistent state, albeit because it is associated/linked by one of the others. this is definetly the case if you are starting a transaction in HibernateUtil.insert(), passing the object to Session.save, and then committing the transaction? how are you taking care of the transaction ?


Top
 Profile  
 
 Post subject: Re: Exception ?
PostPosted: Wed Nov 09, 2005 9:48 pm 
Regular
Regular

Joined: Tue Nov 04, 2003 12:37 pm
Posts: 57
Hi,

For this problem, the UserRole (ur and ur1) I get out and put them into another transaction, can it ?


tx1 > get "ur" > end tx1
tx2 > get "ur1" > end tx2


set ur and ur1 to other entity
set another entity to ur and ur1


tx3 > save other entity > commit tx3




For the above transaction, can it work ?
I just want to retrieve the UserRoles and set to the new Entity, after that save the new entity. Any good idea to do that?


Best regards,
Eric


Top
 Profile  
 
 Post subject:
PostPosted: Wed Nov 09, 2005 10:15 pm 
Expert
Expert

Joined: Thu Dec 23, 2004 9:08 pm
Posts: 2008
It can work, if you're careful about how and when you save, update or merge your objects. As Dennis said, you need to be clear on the difference between transiest and persistent; even more important, you need to know the difference between detached and persistent.

The text and trace of the exception suggests to me that you're trying to insert UserGroup id 2, "kudocsuser", into the UserGroup table. I'm guessing that you don't want to do that, you just want to add a link between the User table and the UserGroup table. Which leads me the think that your mapping is wrong. Turn on sql output and ensure that you're not trying to insert or update to any tables that you don't want to.


Top
 Profile  
 
 Post subject: the sources
PostPosted: Wed Nov 09, 2005 11:42 pm 
Regular
Regular

Joined: Tue Nov 04, 2003 12:37 pm
Posts: 57
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


Top
 Profile  
 
 Post subject: Again
PostPosted: Wed Nov 09, 2005 11:45 pm 
Regular
Regular

Joined: Tue Nov 04, 2003 12:37 pm
Posts: 57
The following is my another part of codes, it almost did the same thing, but no exceptions at all ! I almost crazy and don't know why. Please give me a hand !


Code:
private static void createAdmin() throws Exception {

      Session session = null;
      UserDAO userDAO = null;

      try {
         // kudocsadmin
         User user = null;

         session = HibernateUtil.start();

         userDAO = new UserDAO(session);

         user = (User) userDAO.findByUsername(GlobalConstant.KUDOCS_ADMIN);

         HibernateUtil.end();

         if (user == null) {

            // retrieve the skinID
            long skinID = SkinManager.getSkin("classic").getId();
            

            user = new User();

            // user.setId(SystemCounterDAO.nextId(GlobalConstant.USER_COUNTER));
            user.setStatus(StatusDAO.ACTIVE());

            // UserSecurity
            UserSecurity us = new UserSecurity();
            // us.setId(SystemCounterDAO.nextId(GlobalConstant.USERSECURITY_COUNTER));
            us.setUsername(GlobalConstant.KUDOCS_ADMIN);
            // us.setId(SystemCounterDAO.nextId(GlobalConstant.USERSECURITY_COUNTER));
            String seed = Password.getSeed();
            us.setSeed(seed);
            us.setPassword(Password.newCrypt("123456", seed));
            us.setUser(user);
            us.setCheckIp(false);
            user.setUserSecurity(us);
            // HibernateUtil.insert(session, us);

            // UserPreference / PreferenceNode
            UserPreference userPref = new UserPreference();
            PreferenceNode prefNode = new PreferenceNode();

            prefNode.putNode(GlobalConstant.PREFERENCE_SKIN, "" + skinID);
            userPref.addPreferenceNode(prefNode);
            prefNode.setPreferences(userPref);

            userPref.setOwner(user);
            user.setUserPreferences(userPref);

            // UserGroup
            UserGroup ug = UserManager.getGroup("kudocsadmin");
            ug.addUser(user);
            user.addGroup(ug);

            // UserRole
            UserRole ur = UserManager.getRole("kudocsadmin");            
            ur.addUser(user);
            user.addRole(ur);

            UserRole ur1 = UserManager.getRole("kudocsuser");      
            ur1.addUser(user);
            user.addRole(ur1);

            // UserInfo
            UserInfo info = new UserInfo();
            // info.setId(SystemCounterDAO.nextId(GlobalConstant.USERINFO_COUNTER));
            info.setFirstName("KuDocs");
            info.setLastName("KuDocs");
            info.setSex(GlobalConstant.MALE);
            info.setBirth(DateTimeUtil.formatDate(DateTimeUtil.formatDate(
                  new Date(), "dd/MM/yyyy"), "dd/MM/yyyy"));
            info.setOwner(user);

            // address
            Address addr = new Address();
            // addr.setId(SystemCounterDAO.nextId(GlobalConstant.ADDRESS_COUNTER));
            addr.setStreet1("KuDocs Tower");
            addr.setCity("MACAU S.A.R.");
            addr.setCountry("CHINA PRC");
            addr.setUserInfo(info);

            info.setAddress(addr);
            user.setUserInfo(info);

            session = HibernateUtil.start();

            HibernateUtil.insert(session, us);
            HibernateUtil.insert(session, prefNode);
            HibernateUtil.insert(session, userPref);
            HibernateUtil.insert(session, info);
            HibernateUtil.insert(session, addr);
            HibernateUtil.insert(session, user);

            HibernateUtil.end(true);

            log.info("===== INITIALIZE ADMINISTRATOR =====");
         }
      } catch (Exception e) {
         HibernateUtil.rollbackTransaction();
         log.error("Create kudocsadmin failed: ", e);
      } finally {
         HibernateUtil.close();
      }

   }


Top
 Profile  
 
 Post subject: Exception !
PostPosted: Thu Nov 10, 2005 2:23 am 
Regular
Regular

Joined: Tue Nov 04, 2003 12:37 pm
Posts: 57
Hello,

After I change the code as following, it works, I relayy don't know why ?

I just separate the setRole ....... for th user !!!

Code:
private static void createGuest() throws Exception {
      Session session = null;
      UserDAO userDAO = null;

      try {
         // guest
         User user = UserManager.getGuest();
         /*
         session = HibernateUtil.start();

         userDAO = new UserDAO(session);

         user = (User) userDAO.findByUsername(GlobalConstant.KUDOCS_GUEST);

         HibernateUtil.end();
         */
         if (user == null) {            
            // retrieve the skinID
            long skinID = SkinManager.getDefaultSkin().getId();            

            
            
            user = new User();

            // user.setId(SystemCounterDAO.nextId(GlobalConstant.USER_COUNTER));
            user.setStatus(StatusDAO.ACTIVE());

            // UserSecurity
            UserSecurity us = new UserSecurity();
            // us.setId(SystemCounterDAO.nextId(GlobalConstant.USERSECURITY_COUNTER));
            us.setUsername(GlobalConstant.KUDOCS_GUEST);
            // us.setId(SystemCounterDAO.nextId(GlobalConstant.USERSECURITY_COUNTER));
            String seed = Password.getSeed();
            us.setSeed(seed);
            us.setPassword(Password.newCrypt("123456", seed));
            us.setUser(user);
            us.setCheckIp(false);
            user.setUserSecurity(us);

            // UserPreference / PreferenceNode
            UserPreference userPref = new UserPreference();
            PreferenceNode prefNode = new PreferenceNode();

            prefNode.putNode(GlobalConstant.PREFERENCE_SKIN, "" + skinID);
            userPref.addPreferenceNode(prefNode);
            prefNode.setPreferences(userPref);

            userPref.setOwner(user);
            user.setUserPreferences(userPref);
            
            // UserGroup
            UserGroup ug = UserManager.getGroup(session, "kudocsuser");
            ug.addUser(user);
            user.addGroup(ug);

            // UserRole
            UserRole ur = UserManager.getRole(session, "kudocsguest");
            ur.addUser(user);
            user.addRole(ur);
            

            /*
            UserRole ur1 = UserManager.getRole(session, "kudocsuser");
            ur1.addUser(user);
            user.addRole(ur1);
            */

            // UserInfo
            UserInfo info = new UserInfo();
            // info.setId(SystemCounterDAO.nextId(GlobalConstant.USERINFO_COUNTER));
            info.setFirstName("Guest");
            info.setLastName("Guest");
            info.setSex(GlobalConstant.MALE);
            info.setBirth(DateTimeUtil.formatDate(DateTimeUtil.formatDate(
                  new Date(), "dd/MM/yyyy"), "dd/MM/yyyy"));
            info.setOwner(user);

            // address
            Address addr = new Address();
            // addr.setId(SystemCounterDAO.nextId(GlobalConstant.ADDRESS_COUNTER));
            addr.setStreet1("KuDocs Tower");
            addr.setCity("MACAU S.A.R.");
            addr.setCountry("CHINA PRC");
            addr.setUserInfo(info);

            info.setAddress(addr);
            user.setUserInfo(info);

            session = HibernateUtil.start();                        

            HibernateUtil.insert(session, us);
            HibernateUtil.insert(session, prefNode);
            HibernateUtil.insert(session, userPref);
            HibernateUtil.insert(session, info);
            HibernateUtil.insert(session, addr);
            HibernateUtil.insert(session, user);

            HibernateUtil.end(true);

//------------------------------------ SEPARATE the ROLE here         
            session = HibernateUtil.start();
            
            UserRole ur1 = UserManager.getRole(session, "kudocsuser");
            ur1.addUser(user);
            user.addRole(ur1);
            
            HibernateUtil.update(user);
            
            HibernateUtil.end(true);
//------------------------------------ end SEPARATING the ROLE


            log.info("===== INITIALIZE GUEST =====");
         }
      } catch (Exception e) {
         HibernateUtil.rollback();
         log.error("Create guest failed: ", e);
      } finally {
         HibernateUtil.close();
      }
   }


Top
 Profile  
 
 Post subject: Exception
PostPosted: Thu Nov 10, 2005 3:20 am 
Regular
Regular

Joined: Tue Nov 04, 2003 12:37 pm
Posts: 57
hello,

I think the last reply message by me did not solve the problem.

I think it is caused by the CascadeType ???


Any idea on it, pelase refer to my entity source, and could you pelase to teach me how can define the correct cascade type for them (ManyToMany) ??


Best regards,
Eric


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 8 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.