[hibernate-issues] [Hibernate-JIRA] Created: (HHH-7073) Audited entities with Many-to-Many relationships fail with NullPointerException

Clement Pang (JIRA) noreply at atlassian.com
Wed Feb 15 22:28:12 EST 2012


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

        


More information about the hibernate-issues mailing list