-->
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.  [ 3 posts ] 
Author Message
 Post subject: PropertyValueException: not-null property references a null
PostPosted: Tue Jun 01, 2010 3:44 pm 
Newbie

Joined: Tue Jun 01, 2010 3:07 pm
Posts: 3
Hi, all!

I have the problem:
--------------------------------------------------------------------------------------------------------------------------------------
hibernate.log:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
474 - Checking 0 named HQL queries
21:28:56,796 DEBUG SessionFactoryImpl:494 - Checking 0 named SQL queries
21:28:56,812 DEBUG SessionImpl:248 - opened session at timestamp: 12754169367
21:28:56,812 DEBUG JDBCTransaction:82 - begin
21:28:56,828 DEBUG ConnectionManager:444 - opening JDBC connection
21:28:56,828 DEBUG JDBCTransaction:87 - current autocommit status: false
21:28:56,828 DEBUG UserDAO:204 - saving User instance
21:28:56,828 DEBUG IncrementGenerator:104 - fetching initial value: select max(user_id) from user
21:28:56,828 DEBUG AbstractBatcher:410 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
21:28:56,828 DEBUG SQL:111 - select max(user_id) from user
21:28:56,843 DEBUG IncrementGenerator:119 - first free id: 1
21:28:56,843 DEBUG AbstractBatcher:418 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
21:28:56,843 DEBUG AbstractSaveEventListener:135 - generated identifier: 1, using strategy: org.hibernate.id.IncrementGenerator
21:28:56,859 ERROR UserDAO:212 - save failed
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.shop.hibernate.User.userGroup
   at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95)
   at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313)
   at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
   at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
   at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
   at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
   at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
   at com.shop.hibernate.UserDAO.save(UserDAO.java:207)
   at com.tests.UserDaoTests.testSave(UserDaoTests.java:169)
   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:597)
   at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
   at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
   at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
   at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
   at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
   at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
   at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
   at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
   at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
   at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
   at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
   at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

--------------------------------------------------------------------------------------------------------------------------------------
My settings:
--------------------------------------------------------------------------------------------------------------------------------------
hibernate.cfg.xml:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

   <session-factory>
      <property name="dialect">
         org.hibernate.dialect.MySQLDialect
      </property>
      <property name="connection.url">
         jdbc:mysql://localhost:3306/shopdb
      </property>
      <property name="connection.username">***</property>
      <property name="connection.password">***</property>
      <property name="connection.driver_class">
         com.mysql.jdbc.Driver
      </property>
      <property name="myeclipse.connection.profile">
         MySql Shop Connection
      </property>
      <property name="hbm2ddl.auto">create-drop</property>
      <property name="show_sql">true</property>
      <mapping resource="com/shop/hibernate/User.hbm.xml" />
      <mapping resource="com/shop/hibernate/UserGroup.hbm.xml" />
   </session-factory>
</hibernate-configuration>

--------------------------------------------------------------------------------------------------------------------------------------
User.hbm.xml:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file
-->
<hibernate-mapping>
    <class name="com.shop.hibernate.User" table="user" catalog="shopdb">
        <id name="userId" type="java.lang.Integer">
            <column name="user_id" />
            <generator class="increment" />
        </id>
        <many-to-one name="userGroup" class="com.shop.hibernate.UserGroup" fetch="select">
            <column name="user_group_id" not-null="true" />
        </many-to-one>
        <property name="username" type="java.lang.String">
            <column name="username" length="20" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="32" not-null="true" />
        </property>
        <property name="firstname" type="java.lang.String">
            <column name="firstname" length="32" not-null="true" />
        </property>
        <property name="lastname" type="java.lang.String">
            <column name="lastname" length="32" not-null="true" />
        </property>
        <property name="email" type="java.lang.String">
            <column name="email" length="96" not-null="true" />
        </property>
        <property name="status" type="java.lang.Integer">
            <column name="status" not-null="true" />
        </property>
        <property name="ip" type="java.lang.String">
            <column name="ip" length="15" not-null="true" />
        </property>
        <property name="dateAdded" type="java.sql.Timestamp">
            <column name="date_added" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

--------------------------------------------------------------------------------------------------------------------------------------
AbstractUser.java:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
package com.shop.hibernate;

import java.sql.Timestamp;

/**
* AbstractUser entity provides the base persistence definition of the User
* entity. @author vav
*/

public abstract class AbstractUser implements java.io.Serializable
{

   // Fields

   private Integer      userId;

   private UserGroup   userGroup;

   private String      username;

   private String      password;
   private String      firstname;
   private String      lastname;
   private String      email;
   private Integer      status;
   private String      ip;
   private Timestamp   dateAdded;

   /** default constructor */
   public AbstractUser()
   {
   }

   /** full constructor */
   public AbstractUser(UserGroup userGroup, String username, String password,
         String firstname, String lastname, String email, Integer status,
         String ip, Timestamp dateAdded)
   {
      this.userGroup = userGroup;
      this.username = username;
      this.password = password;
      this.firstname = firstname;
      this.lastname = lastname;
      this.email = email;
      this.status = status;
      this.ip = ip;
      this.dateAdded = dateAdded;
   }

   /*
    * (non-Javadoc)
    *
    * @see java.lang.Object#equals(java.lang.Object)
    */
   @Override
   public boolean equals(Object obj)
   {
      if (this == obj)
      {
         return true;
      }
      if (obj == null)
      {
         return false;
      }
      if (!(obj instanceof AbstractUser))
      {
         return false;
      }
      AbstractUser other = (AbstractUser) obj;
      if (dateAdded == null)
      {
         if (other.dateAdded != null)
         {
            return false;
         }
      }
      else if (!dateAdded.equals(other.dateAdded))
      {
         return false;
      }
      if (email == null)
      {
         if (other.email != null)
         {
            return false;
         }
      }
      else if (!email.equals(other.email))
      {
         return false;
      }
      if (firstname == null)
      {
         if (other.firstname != null)
         {
            return false;
         }
      }
      else if (!firstname.equals(other.firstname))
      {
         return false;
      }
      if (ip == null)
      {
         if (other.ip != null)
         {
            return false;
         }
      }
      else if (!ip.equals(other.ip))
      {
         return false;
      }
      if (lastname == null)
      {
         if (other.lastname != null)
         {
            return false;
         }
      }
      else if (!lastname.equals(other.lastname))
      {
         return false;
      }
      if (password == null)
      {
         if (other.password != null)
         {
            return false;
         }
      }
      else if (!password.equals(other.password))
      {
         return false;
      }
      if (status == null)
      {
         if (other.status != null)
         {
            return false;
         }
      }
      else if (!status.equals(other.status))
      {
         return false;
      }
      if (userGroup == null)
      {
         if (other.userGroup != null)
         {
            return false;
         }
      }
      else if (!userGroup.equals(other.userGroup))
      {
         return false;
      }
      if (userId == null)
      {
         if (other.userId != null)
         {
            return false;
         }
      }
      else if (!userId.equals(other.userId))
      {
         return false;
      }
      if (username == null)
      {
         if (other.username != null)
         {
            return false;
         }
      }
      else if (!username.equals(other.username))
      {
         return false;
      }
      return true;
   }

   // Constructors

   public Timestamp getDateAdded()
   {
      return this.dateAdded;
   }

   public String getEmail()
   {
      return this.email;
   }

   // Property accessors

   public String getFirstname()
   {
      return this.firstname;
   }

   public String getIp()
   {
      return this.ip;
   }

   public String getLastname()
   {
      return this.lastname;
   }

   public String getPassword()
   {
      return this.password;
   }

   public Integer getStatus()
   {
      return this.status;
   }

   public UserGroup getUserGroup()
   {
      return this.userGroup;
   }

   public Integer getUserId()
   {
      return this.userId;
   }

   public String getUsername()
   {
      return this.username;
   }

   /*
    * (non-Javadoc)
    *
    * @see java.lang.Object#hashCode()
    */
   @Override
   public int hashCode()
   {
      final int prime = 31;
      int result = 1;
      result = prime * result
            + ((dateAdded == null) ? 0 : dateAdded.hashCode());
      result = prime * result + ((email == null) ? 0 : email.hashCode());
      result = prime * result
            + ((firstname == null) ? 0 : firstname.hashCode());
      result = prime * result + ((ip == null) ? 0 : ip.hashCode());
      result = prime * result
            + ((lastname == null) ? 0 : lastname.hashCode());
      result = prime * result
            + ((password == null) ? 0 : password.hashCode());
      result = prime * result + ((status == null) ? 0 : status.hashCode());
      result = prime * result
            + ((userGroup == null) ? 0 : userGroup.hashCode());
      result = prime * result + ((userId == null) ? 0 : userId.hashCode());
      result = prime * result
            + ((username == null) ? 0 : username.hashCode());
      return result;
   }

   public void setDateAdded(Timestamp dateAdded)
   {
      this.dateAdded = dateAdded;
   }

   public void setEmail(String email)
   {
      this.email = email;
   }

   public void setFirstname(String firstname)
   {
      this.firstname = firstname;
   }

   public void setIp(String ip)
   {
      this.ip = ip;
   }

   public void setLastname(String lastname)
   {
      this.lastname = lastname;
   }

   public void setPassword(String password)
   {
      this.password = password;
   }

   public void setStatus(Integer status)
   {
      this.status = status;
   }

   public void setUserGroup(UserGroup userGroup)
   {
      this.userGroup = userGroup;
   }

   public void setUserId(Integer userId)
   {
      this.userId = userId;
   }

   public void setUsername(String username)
   {
      this.username = username;
   }

   /*
    * (non-Javadoc)
    *
    * @see java.lang.Object#toString()
    */
   @Override
   public String toString()
   {
      return "AbstractUser [username=" + username + "]";
   }

}

--------------------------------------------------------------------------------------------------------------------------------------
User.java:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
package com.shop.hibernate;

import java.sql.Timestamp;

/**
* User entity. @author vav
*/
public class User extends AbstractUser implements java.io.Serializable
{

   // Constructors

   /** default constructor */
   public User()
   {
   }

   /** full constructor */
   public User(UserGroup userGroup, String username, String password,
         String firstname, String lastname, String email, Integer status,
         String ip, Timestamp dateAdded)
   {
      super(userGroup, username, password, firstname, lastname, email,
            status, ip, dateAdded);
   }

}

--------------------------------------------------------------------------------------------------------------------------------------
UserGroup.hbm.xml:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file
-->
<hibernate-mapping>
    <class name="com.shop.hibernate.UserGroup" table="user_group" catalog="shopdb">
        <id name="userGroupId" type="java.lang.Integer">
            <column name="user_group_id" />
            <generator class="increment" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="64" not-null="true" />
        </property>
        <property name="permission" type="java.lang.String">
            <column name="permission" length="65535" not-null="true" />
        </property>
        <set name="users" inverse="true">
            <key>
                <column name="user_group_id" not-null="true" />
            </key>
            <one-to-many class="com.shop.hibernate.User" />
        </set>
    </class>
</hibernate-mapping>

--------------------------------------------------------------------------------------------------------------------------------------
AbstractUserGroup.java:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
package com.shop.hibernate;

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

/**
* AbstractUserGroup entity provides the base persistence definition of the
* UserGroup entity. @author vav
*/

public abstract class AbstractUserGroup implements java.io.Serializable
{

   // Fields

   private Integer      userGroupId;

   private String      name;

   private String      permission;

   private Set<User>   users   = new HashSet<User>(0);

   /** default constructor */
   public AbstractUserGroup()
   {
   }

   /** minimal constructor */
   public AbstractUserGroup(String name, String permission)
   {
      this.name = name;
      this.permission = permission;
   }

   /** full constructor */
   public AbstractUserGroup(String name, String permission, Set<User> users)
   {
      this.name = name;
      this.permission = permission;
      this.users = users;
   }

   // Constructors

   /*
    * (non-Javadoc)
    *
    * @see java.lang.Object#equals(java.lang.Object)
    */
   @Override
   public boolean equals(Object obj)
   {
      if (this == obj)
      {
         return true;
      }
      if (obj == null)
      {
         return false;
      }
      if (!(obj instanceof AbstractUserGroup))
      {
         return false;
      }
      AbstractUserGroup other = (AbstractUserGroup) obj;
      if (name == null)
      {
         if (other.name != null)
         {
            return false;
         }
      }
      else if (!name.equals(other.name))
      {
         return false;
      }
      if (permission == null)
      {
         if (other.permission != null)
         {
            return false;
         }
      }
      else if (!permission.equals(other.permission))
      {
         return false;
      }
      if (userGroupId == null)
      {
         if (other.userGroupId != null)
         {
            return false;
         }
      }
      else if (!userGroupId.equals(other.userGroupId))
      {
         return false;
      }
      if (users == null)
      {
         if (other.users != null)
         {
            return false;
         }
      }
      else if (!users.equals(other.users))
      {
         return false;
      }
      return true;
   }

   public String getName()
   {
      return this.name;
   }

   public String getPermission()
   {
      return this.permission;
   }

   // Property accessors

   public Integer getUserGroupId()
   {
      return this.userGroupId;
   }

   public Set<User> getUsers()
   {
      return this.users;
   }

   /*
    * (non-Javadoc)
    *
    * @see java.lang.Object#hashCode()
    */
   @Override
   public int hashCode()
   {
      final int prime = 31;
      int result = 1;
      result = prime * result + ((name == null) ? 0 : name.hashCode());
      result = prime * result
            + ((permission == null) ? 0 : permission.hashCode());
      result = prime * result
            + ((userGroupId == null) ? 0 : userGroupId.hashCode());
      result = prime * result + ((users == null) ? 0 : users.hashCode());
      return result;
   }

   public void setName(String name)
   {
      this.name = name;
   }

   public void setPermission(String permission)
   {
      this.permission = permission;
   }

   public void setUserGroupId(Integer userGroupId)
   {
      this.userGroupId = userGroupId;
   }

   public void setUsers(Set<User> users)
   {
      this.users = users;
   }

   /*
    * (non-Javadoc)
    *
    * @see java.lang.Object#toString()
    */
   @Override
   public String toString()
   {
      return "AbstractUserGroup [name=" + name + "]";
   }

}

--------------------------------------------------------------------------------------------------------------------------------------
UserGroup.java:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
package com.shop.hibernate;

import java.util.Set;

/**
* UserGroup entity. @author vav
*/
public class UserGroup extends AbstractUserGroup implements
      java.io.Serializable
{

   // Constructors

   /** default constructor */
   public UserGroup()
   {
   }

   /** minimal constructor */
   public UserGroup(String name, String permission)
   {
      super(name, permission);
   }

   /** full constructor */
   public UserGroup(String name, String permission, Set<User> users)
   {
      super(name, permission, users);
   }

}

--------------------------------------------------------------------------------------------------------------------------------------
Test programm:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
   /**
    * Test method for
    * {@link com.shop.hibernate.UserDAO#save(com.shop.hibernate.User)}.
    */
   @Test
   public final void testSave()
   {
      // 0. Create user group
      UserGroup userGroup = new UserGroup();
      userGroup.setName("managers");
      userGroup.setPermission("restricted");

      // 1. Create user
      User user = new User();
      user.setDateAdded(new Timestamp(new Date().getDate()));
      user.setEmail("test@test.tst");
      user.setFirstname("Test");
      user.setIp("localhost");
      user.setLastname("Test");
      user.setPassword("test");
      user.setStatus(new Integer(11));
      user.setUserGroup(userGroup);
      user.setUsername("test");

      // 2. Create DAO
      UserDAO dao = new UserDAO();

      // 3. Start the transaction
      Transaction tx = dao.getSession().beginTransaction();

      // 4. Add user
      dao.save(user);

      // 5. Commit the transaction (write to database)
      tx.commit();

      // 6. Close the session (cleanup connections)
      dao.getSession().close();
   }

--------------------------------------------------------------------------------------------------------------------------------------

Thanks for your help!


Top
 Profile  
 
 Post subject: Re: PropertyValueException: not-null property references a null
PostPosted: Tue Jun 01, 2010 4:22 pm 
Newbie

Joined: Tue Jun 01, 2010 3:07 pm
Posts: 3
Hi, all!

when i change:
--------------------------------------------------------------------------------------------------------------------------------------
User.hbm.xml:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file
-->
<hibernate-mapping>
    <class name="com.shop.hibernate.User" table="user" catalog="shopdb">
        <id name="userId" type="java.lang.Integer">
            <column name="user_id" />
            <generator class="increment" />
        </id>
        <many-to-one name="userGroup" class="com.shop.hibernate.UserGroup" fetch="select">
            <column name="user_group_id" not-null="true" />
        </many-to-one>
        <property name="username" type="java.lang.String">
            <column name="username" length="20" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="32" not-null="true" />
        </property>
        <property name="firstname" type="java.lang.String">
            <column name="firstname" length="32" not-null="true" />
        </property>
        <property name="lastname" type="java.lang.String">
            <column name="lastname" length="32" not-null="true" />
        </property>
        <property name="email" type="java.lang.String">
            <column name="email" length="96" not-null="true" />
        </property>
        <property name="status" type="java.lang.Integer">
            <column name="status" not-null="true" />
        </property>
        <property name="ip" type="java.lang.String">
            <column name="ip" length="15" not-null="true" />
        </property>
        <property name="dateAdded" type="java.sql.Timestamp">
            <column name="date_added" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

--------------------------------------------------------------------------------------------------------------------------------------
UserGroup.hbm.xml:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file
-->
<hibernate-mapping>
    <class name="com.shop.hibernate.UserGroup" table="user_group" catalog="shopdb">
        <id name="userGroupId" type="java.lang.Integer">
            <column name="user_group_id" />
            <generator class="increment" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="64" not-null="true" />
        </property>
        <property name="permission" type="java.lang.String">
            <column name="permission" length="65535" not-null="true" />
        </property>
        <set name="users" cascade="all-delete-orphan" inverse="true">
            <key>
                <column name="user_group_id" />
            </key>
            <one-to-many class="com.shop.hibernate.User" />
        </set>
    </class>
</hibernate-mapping>

--------------------------------------------------------------------------------------------------------------------------------------
Test programm:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
   /**
    * Test method for
    * {@link com.shop.hibernate.UserDAO#save(com.shop.hibernate.User)}.
    */
   @Test
   public final void testSave()
   {
      // 0. Create user group
      UserGroup userGroup = new UserGroup();
      userGroup.setName("managers");
      userGroup.setPermission("restricted");

      // 1. Create user
      User user = new User();
      user.setDateAdded(new Timestamp(new Date().getDate()));
      user.setEmail("test@test.tst");
      user.setFirstname("Test");
      user.setIp("localhost");
      user.setLastname("Test");
      user.setPassword("test");
      user.setStatus(new Integer(11));
      user.setUsername("test");

      Set<User> users = new HashSet<User>();
      users.add(user);
      userGroup.setUsers(users);

      // 2. Create DAO
      UserGroupDAO dao = new UserGroupDAO();

      // 3. Start the transaction
      Transaction tx = dao.getSession().beginTransaction();

      // 4. Add user group with users(becouse cascade="all-delete-orphan")
      dao.save(userGroup);

      // 5. Commit the transaction (write to database)
      tx.commit();

      // 6. Close the session (cleanup connections)
      dao.getSession().close();
   }

--------------------------------------------------------------------------------------------------------------------------------------
i get:
--------------------------------------------------------------------------------------------------------------------------------------
hibernate.log:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
23:15:30,859 DEBUG SessionFactoryImpl:474 - Checking 0 named HQL queries
23:15:30,859 DEBUG SessionFactoryImpl:494 - Checking 0 named SQL queries
23:15:30,890 DEBUG SessionImpl:248 - opened session at timestamp: 12754233308
23:15:30,890 DEBUG JDBCTransaction:82 - begin
23:15:30,890 DEBUG ConnectionManager:444 - opening JDBC connection
23:15:30,890 DEBUG JDBCTransaction:87 - current autocommit status: false
23:15:30,890 DEBUG UserGroupDAO:174 - saving UserGroup instance
23:15:30,890 DEBUG IncrementGenerator:104 - fetching initial value: select max(user_group_id) from user_group
23:15:30,890 DEBUG AbstractBatcher:410 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
23:15:30,890 DEBUG SQL:111 - select max(user_group_id) from user_group
23:15:30,921 DEBUG IncrementGenerator:119 - first free id: 1
23:15:30,921 DEBUG AbstractBatcher:418 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
23:15:30,921 DEBUG AbstractSaveEventListener:135 - generated identifier: 1, using strategy: org.hibernate.id.IncrementGenerator
23:15:30,921 DEBUG IncrementGenerator:104 - fetching initial value: select max(user_id) from user
23:15:30,921 DEBUG AbstractBatcher:410 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
23:15:30,921 DEBUG SQL:111 - select max(user_id) from user
23:15:30,921 DEBUG IncrementGenerator:119 - first free id: 1
23:15:30,921 DEBUG AbstractBatcher:418 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
23:15:30,921 DEBUG AbstractSaveEventListener:135 - generated identifier: 1, using strategy: org.hibernate.id.IncrementGenerator
23:15:30,921 ERROR UserGroupDAO:182 - save failed
org.hibernate.PropertyValueException: not-null property references a null or transient value: com.shop.hibernate.User.userGroup
   at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95)
   at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313)
   at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
   at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
   at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
   at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
   at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
   at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:292)
   at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:240)
   at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
   at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:320)
   at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:266)
   at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:243)
   at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
   at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
   at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:479)
   at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:357)
   at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
   at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
   at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
   at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
   at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
   at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
   at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
   at com.shop.hibernate.UserGroupDAO.save(UserGroupDAO.java:177)
   at com.tests.UserDaoTests.testSave(UserDaoTests.java:169)
   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:597)
   at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
   at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
   at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
   at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
   at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
   at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
   at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
   at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
   at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
   at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
   at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
   at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
   at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

--------------------------------------------------------------------------------------------------------------------------------------

What am I doing wrong?
Help me, please.


Top
 Profile  
 
 Post subject: Re: PropertyValueException: not-null property references a null
PostPosted: Tue Jun 01, 2010 4:39 pm 
Newbie

Joined: Tue Jun 01, 2010 3:07 pm
Posts: 3
I fixed it.
--------------------------------------------------------------------------------------------------------------------------------------
User.hbm.xml:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file
-->
<hibernate-mapping>
    <class name="com.shop.hibernate.User" table="user" catalog="shopdb">
        <id name="userId" type="java.lang.Integer">
            <column name="user_id" />
            <generator class="increment" />
        </id>
        <many-to-one name="userGroup" class="com.shop.hibernate.UserGroup" fetch="select">
            <column name="user_group_id" not-null="true" />
        </many-to-one>
        <property name="username" type="java.lang.String">
            <column name="username" length="20" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="32" not-null="true" />
        </property>
        <property name="firstname" type="java.lang.String">
            <column name="firstname" length="32" not-null="true" />
        </property>
        <property name="lastname" type="java.lang.String">
            <column name="lastname" length="32" not-null="true" />
        </property>
        <property name="email" type="java.lang.String">
            <column name="email" length="96" not-null="true" />
        </property>
        <property name="status" type="java.lang.Integer">
            <column name="status" not-null="true" />
        </property>
        <property name="ip" type="java.lang.String">
            <column name="ip" length="15" not-null="true" />
        </property>
        <property name="dateAdded" type="java.sql.Timestamp">
            <column name="date_added" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

--------------------------------------------------------------------------------------------------------------------------------------
UserGroup.hbm.xml:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file
-->
<hibernate-mapping>
    <class name="com.shop.hibernate.UserGroup" table="user_group" catalog="shopdb">
        <id name="userGroupId" type="java.lang.Integer">
            <column name="user_group_id" />
            <generator class="increment" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="64" not-null="true" />
        </property>
        <property name="permission" type="java.lang.String">
            <column name="permission" length="65535" not-null="true" />
        </property>
        <set name="users" cascade="all-delete-orphan" inverse="true">
            <key>
                <column name="user_group_id" />
            </key>
            <one-to-many class="com.shop.hibernate.User" />
        </set>
    </class>
</hibernate-mapping>

--------------------------------------------------------------------------------------------------------------------------------------
Test programm:
--------------------------------------------------------------------------------------------------------------------------------------
Code:
   /**
    * Test method for
    * {@link com.shop.hibernate.UserDAO#save(com.shop.hibernate.User)}.
    */
   @Test
   public final void testSave()
   {
      // 0. Create user group
      UserGroup userGroup = new UserGroup();
      userGroup.setName("managers");
      userGroup.setPermission("restricted");

      // 1. Create user
      User user = new User();
      user.setDateAdded(new Timestamp(new Date().getDate()));
      user.setEmail("test@test.tst");
      user.setFirstname("Test");
      user.setIp("localhost");
      user.setLastname("Test");
      user.setPassword("test");
      user.setStatus(new Integer(11));
      user.setUsername("test");
      user.setUserGroup(userGroup);

      // add all users to group
      Set<User> users = new HashSet<User>();
      users.add(user);
      userGroup.setUsers(users);

      // 2. Create DAO
      UserGroupDAO dao = new UserGroupDAO();

      // 3. Start the transaction
      Transaction tx = dao.getSession().beginTransaction();

      // 4. Add userGroup and all users graph(because cascade="all-delete-orphan")
      dao.save(userGroup);

      // 5. Commit the transaction (write to database)
      tx.commit();

      // 6. Close the session (cleanup connections)
      dao.getSession().close();
   }

--------------------------------------------------------------------------------------------------------------------------------------
end remove from each object(POJO class) hashCode and equals method...
--------------------------------------------------------------------------------------------------------------------------------------

Thank all for attention ;-)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 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.