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

Lukasz Antoniak (JIRA) noreply at atlassian.com
Sun Feb 19 14:25:10 EST 2012


    [ https://hibernate.onjira.com/browse/HHH-7073?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45548#comment-45548 ] 

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

        


More information about the hibernate-issues mailing list