[
https://hibernate.onjira.com/browse/HHH-7073?page=com.atlassian.jira.plug...
]
Lukasz Antoniak commented on HHH-7073:
--------------------------------------
Please see my comment at the end of HHH-6661 issue.
Could you please be more specific, and post here the whole mapping of both related
entities? I am unable to reproduce reported exception with the following mapping.
{code:title=Person.java|borderStyle=solid}
@Entity
@Audited
public class Person implements Serializable {
@Id
@GeneratedValue
private Long id;
@ManyToMany(cascade = {CascadeType.PERSIST})
@JoinTable(name = "PERSON_ADDRESS",
joinColumns = {@JoinColumn(name = "personId", nullable =
false)},
inverseJoinColumns = {@JoinColumn(name = "addressId", nullable =
false)})
private Set<Address> addresses = new HashSet<Address>();
...
}
{code}
{code:title=Address.java|borderStyle=solid}
@Entity
@Audited
public class Address implements Serializable {
@Id
@GeneratedValue
private Long id;
@ManyToMany(cascade = {CascadeType.PERSIST})
private Set<Person> tenants = new HashSet<Person>();
...
}
{code}
Regards,
Lukasz Antoniak
Audited entities with Many-to-Many relationships fail with
NullPointerException
-------------------------------------------------------------------------------
Key: HHH-7073
URL:
https://hibernate.onjira.com/browse/HHH-7073
Project: Hibernate ORM
Issue Type: Bug
Components: envers
Affects Versions: 4.1.0
Reporter: Clement Pang
The entity contains the following field:
@ManyToMany(cascade = {CascadeType.PERSIST})
@JoinTable(
name = "Apples",
joinColumns = {@JoinColumn(name = "storeId", nullable = false)},
inverseJoinColumns = {@JoinColumn(name = "appleId", nullable = false)}
)
public Set<Apple> apples = new HashSet<Apple>();
An exception is thrown when saving the entity:
java.lang.NullPointerException
at
org.hibernate.envers.entities.EntitiesConfigurations.getToPropertyNames(EntitiesConfigurations.java:155)
at
org.hibernate.envers.event.BaseEnversEventListener.addCollectionChangeWorkUnit(BaseEnversEventListener.java:121)
at
org.hibernate.envers.event.BaseEnversEventListener.generateBidirectionalCollectionChangeWorkUnits(BaseEnversEventListener.java:90)
at
org.hibernate.envers.event.EnversPostInsertEventListenerImpl.onPostInsert(EnversPostInsertEventListenerImpl.java:60)
at
org.hibernate.action.internal.EntityIdentityInsertAction.postInsert(EntityIdentityInsertAction.java:149)
at
org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:102)
In that particular method:
public Set<String> getToPropertyNames(String fromEntityName, String
fromPropertyName, String toEntityName) {
Set<String> entityAndParentsNames = getEntityAndParentsNames(fromEntityName);
Set<String> toPropertyNames = new HashSet<String>();
for (RelationDescription relationDescription : getRelationDescriptions(toEntityName))
{
String relToEntityName = relationDescription.getToEntityName();
String mappedByPropertyName = relationDescription.getMappedByPropertyName();
if (entityAndParentsNames.contains(relToEntityName) &&
mappedByPropertyName.equals(fromPropertyName)) {
toPropertyNames.add(relationDescription.getFromPropertyName());
}
}
return toPropertyNames;
}
mappedByPropertyName is null since RelationDescription can have null mappedByPropertyName
when invoked at: EntityConfiguration
public void addToManyMiddleRelation(String fromPropertyName, String toEntityName) {
relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationType.TO_MANY_MIDDLE,
toEntityName, null, null, null, null, true));
}
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira