openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vermeulen (JIRA)" <>
Subject [jira] Created: (OPENJPA-1949) inserting new entities to the front of an existing List fails when using GenerationType.IDENTITY
Date Tue, 22 Feb 2011 08:45:38 GMT
inserting new entities to the front of an existing List fails when using GenerationType.IDENTITY

                 Key: OPENJPA-1949
             Project: OpenJPA
          Issue Type: Bug
          Components: kernel
    Affects Versions: 2.1.0
         Environment: ms sql server
            Reporter: Vermeulen

This problem occurs when I try to insert new entities to an existing list and I use a generated
identity with GenerationType.IDENTITY.

I start with a fresh database and let OpenJPA create the schema. I have a ProductOrder entity
that contains a List of ProductOrderLines, annotated as such:

public class ProductOrder {
            @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
            private List<ProductOrderLine> products = new ArrayList<ProductOrderLine>();

The entity in the List (ProductOrderLine) has a generated id with GenerationType.IDENTITY.

public class ProductOrderLine {

            @GeneratedValue(strategy = GenerationType.IDENTITY)
            private Long id;

I start with a ProductOrder that has these products:
1 - orange
2 - apple

I insert two new products into the front of the list so that I get:
null - banana
null - pear
1 - orange
2 - apple

Then I merge the entity (I work with attach/detach, not sure if this matters).
OpenJPA merge correctly returns a ProductOrder with this list:

3 - banana
4 - pear
1 - orange
2 - apple

However OpenJPA generates the wrong SQL so that the database contains something completely
different and indeed selecting the ProductOrder by it's id gives:

3 - banana
4 - pear
4 - pear
4 - pear

I tested this with ms sql server 2008 express. (I tried hsqldb but this also suffers from
bug OPENJPA-1066).
This problem does not occur when I use GenerationType.TABLE for ProductOrderLine. My example
uses a join table, but foreign key columns seem to have the same problem.

Different workarounds I found:
- Use another GenerationType for the id column
- add the new entities to the end of the List
- (somehow only works in the toy example not in our application) replace the entire list reference
to a new ArrayList containing the same elements in the same order

This message is automatically generated by JIRA.
For more information on JIRA, see:


View raw message