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

Lukasz Antoniak (JIRA) noreply at atlassian.com
Fri Feb 24 13:53:48 EST 2012


     [ https://hibernate.onjira.com/browse/HHH-7073?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Lukasz Antoniak resolved HHH-7073.
----------------------------------

       Resolution: Fixed
    Fix Version/s: 4.1.1
         Assignee: Lukasz Antoniak

Thank you for the clear test case. Not null check that was mentioned previously seems to resolve this issue. I have developed more complex test and committed it with actual fix to the master branch. If you'd like, you can checkout source code from Hibernate's Git repository and build your own snapshot instead of waiting till 07/Mar/12 for 4.1.1 release.

> 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
>            Assignee: Lukasz Antoniak
>             Fix For: 4.1.1
>
>         Attachments: HHH-7073.ZIP
>
>
> 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