I was reading about cascades in section 9.3...
I've defined a parent / child relationship between Team and Player:
In this test class, only player p1 is saved. This happens because the player identifier is null, and the equals method in PlayerVO class returns "true" when it compares p1 and p2 instances. Then p2 instance isn't added to the collection.
My equals and hascode methods were created by Hibernate CodeGenerator.
please anybody can help me?
thanks
Code:
public boolean equals(Object other) {
if ( !(other instanceof PlayerVO) ) return false;
PlayerVO castOther = (PlayerVO) other;
return new EqualsBuilder()
.append(this.getId(), castOther.getId())
.isEquals();
}
Code:
public static void main(String[] args) throws Exception
{
SessionFactory sf = getSessionFactory();
Session session = sf.openSession();
TeamVO team = new TeamVO();
team.setCity("curitiba");
team.setName("Timao");
team.setPlayers(new HashSet());
PlayerVO p1 = new PlayerVO("Ricardo","Lecheta");
addPlayer(team, p1);
PlayerVO p2 = new PlayerVO("Carlos","Tosin");
addPlayer(team, p2);
session.save(team);
close(session);
}
private static void addPlayer(TeamVO team, PlayerVO p1)
{
p1.setTeam(team);
team.getPlayers().add(p1);
}
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="hibernate.TeamVO" table="teams" proxy="hibernate.TeamVO">
<id name="id" column="team_id" type="long" unsaved-value="null">
<generator class="sequence">
<param name="sequence">team_sequence</param>
</generator>
</id>
<property name="name" column="team_name" type="string" length="15" not-null="true"/>
<property name="city" column="city" type="string" length="15" not-null="true"/>
<set name="players" cascade="all" inverse="false" lazy="true">
<key>
<column name="team_id" not-null="true"/>
</key>
<one-to-many class="hibernate.PlayerVO" />
</set>
</class>
</hibernate-mapping>
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="hibernate.PlayerVO" table="players">
<id name="id" type="long" column="player_id" unsaved-value="null">
<generator class="sequence">
<param name="sequence">player_sequence</param>
</generator>
</id>
<property name="firstName" column="first_name" type="string" length="12" not-null="true"/>
<property name="lastName" column="last_name" type="string" length="15" not-null="true"/>
<many-to-one name="team" class="hibernate.TeamVO" column="team_id" insert="true"/>
</class>
</hibernate-mapping>