[hibernate-issues] [Hibernate-JIRA] Created: (ANN-491) Collection mapped with javax.persistence.MapKey isn't loaded properly.
Magnus Heino (JIRA)
noreply at atlassian.com
Tue Nov 14 03:49:05 EST 2006
Collection mapped with javax.persistence.MapKey isn't loaded properly.
----------------------------------------------------------------------
Key: ANN-491
URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-491
Project: Hibernate Annotations
Type: Bug
Versions: 3.2.0.ga
Reporter: Magnus Heino
http://forum.hibernate.org/viewtopic.php?t=966948
Add this test to IndexedCollectionTest.java:
public void testMapKeyLoad() throws Exception {
Session s;
Transaction tx;
s = openSession();
tx = s.beginTransaction();
Software hibernate = new Software();
hibernate.setName( "Hibernate" );
Version v1 = new Version();
v1.setCodeName( "HumbaHumba" );
v1.setNumber( "1.0" );
v1.setSoftware( hibernate );
hibernate.addVersion(v1);
s.persist(hibernate);
s.persist(v1);
tx.commit();
s.clear();
tx = s.beginTransaction();
hibernate = (Software) s.get( Software.class, "Hibernate" );
Version v2 = new Version();
v2.setCodeName( "HumbaHumba" );
v2.setNumber( "2.0" );
v2.setSoftware( hibernate );
hibernate.addVersion(v2);
assertEquals("One loaded persisted version, and one just added", 2, hibernate.getVersions().size() );
tx.commit();
s.clear();
tx = s.beginTransaction();
hibernate = (Software) s.get( Software.class, "Hibernate" );
for ( Version v : hibernate.getVersions().values() ) {
s.delete( v );
}
s.delete( hibernate );
tx.commit();
s.close();
}
And modify Software.java to look like this:
//$Id: Software.java 9795 2006-04-26 06:41:18Z epbernard $
package org.hibernate.test.annotations.indexcoll;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
/**
* @author Emmanuel Bernard
*/
@Entity
public class Software {
private String name;
private Map<String, Version> versions;
public Software() {
this.versions = new HashMap<String, Version>();
}
@Id
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy = "software")
@MapKey(name = "codeName")
public Map<String, Version> getVersions() {
return versions;
}
public void setVersions(Map<String, Version> versions) {
this.versions = versions;
}
public void addVersion(Version version) {
this.getVersions().put(version.getCodeName(), version);
}
}
AFAIK addVersion should be able to do this.version.put too if you read the spec, but it doesn't work with the getter as it is now either.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list