[hibernate-issues] [Hibernate-JIRA] Created: (HHH-3958) Superfluous generated updates cause Violation of UNIQUE KEY constraint

Guenther Demetz (JIRA) noreply at atlassian.com
Fri Jun 12 04:03:33 EDT 2009


Superfluous generated updates cause Violation of UNIQUE KEY constraint
----------------------------------------------------------------------

                 Key: HHH-3958
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3958
             Project: Hibernate Core
          Issue Type: Bug
          Components: core
    Affects Versions: 3.3.1
         Environment: 3.3.1 GA, SQLServer 2008
            Reporter: Guenther Demetz
            Priority: Minor
         Attachments: Testcase.jar

When deleting a entire closure of objects associated over @ManyToOne within one single transaction, then on commit
the FlushEventListener creates update statements on objects which are going to be deleted anyway.
These update statements seems not only be useless, 
in certain scenarios they lead to Constraint Violation Exceptions, see the example here:

@Entity
public class A {
    public A() { }

    @Id @GeneratedValue
    private long oid;
}

@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames={"assA_oid"})})
public class B {
    public B() {};
    
    @Id @GeneratedValue
    private long oid;
   
    @javax.persistence.ManyToOne
    protected A assA = null;
}



A a1 = new A();         em.persist(a1);
A a2 = new A();         em.persist(a2);
        
B b1 = new B();
b1.assA = a1; // set unique association

B b2 = new B();
b2.assA = a2; // set unique association

em.persist(b1);
em.persist(b2);        

em.getTransaction().commit();     
em.getTransaction().begin();
        
em.remove(a1);
em.remove(a2);
em.remove(b1);
em.remove(b2);
        
em.getTransaction().commit();  
// p6spy report:
// update B set assA_oid='',version=0 where oid=1 and version=0 
// update B set assA_oid='',version=0 where oid=2 and version=0 --> this raises "Violation of UNIQUE KEY constraint on all DB's which don't allow multiple null values in a unique index


See testcase in attachment

-- 
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