My application has the following bidirectional one-to-many association:
@Entity
@Table(name="TB_CUSTOMERS")
public class Customer {
@OneToMany(mappedBy="customer", cascade={CascadeType.PERSIST,
CascadeType.REMOVE})
@OrderBy("createdDate DESC")
private List<Order> orders = new ArrayList<Order>();
...
@Entity
@Table(name="TB_ORDERS")
public class Order {
@ManyToOne
@JoinColumn(name="CUSTOMER_ID")
private Customer customer;
...
I recently noticed that when a new Order object is added to a Customer
object's Order List, the underlying Customer database table record gets
updated, even though the Customer object was not modified. This is
especially problematic since I have a database trigger defined on the
Customer table that inserts the old version of a record in a Customer
history table for auditing purposes whenever an update occurs.
I am currently using OpenJPA version 2.0.1. I have tried upgrading to
version 2.2.2, but still have the same problem. If I use Hibernate instead
of OpenJPA as the JPA implementation, the Customer database table does NOT
get updated.
Based on my understanding of JPA, the Customer record should not get updated
unless LockModeType.OPTIMISTIC_FORCE_INCREMENT is used (for optimistic
locking).
In case it matters, I am using build time enhancement. Here is the relevant
section from my Maven pom.xml file:
<plugin>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-maven-plugin</artifactId>
<version>${openjpa.version}</version>
<configuration>
<addDefaultConstructor>true</addDefaultConstructor>
</configuration>
<executions>
<execution>
<id>enhancer</id>
<phase>process-classes</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<version>${openjpa.version}</version>
</dependency>
</dependencies>
</plugin>
Any help or advice would be greatly appreciated.
Thanks,
Alain
@Entity
@Table(name="TB_CUSTOMERS")
public class Customer {
@OneToMany(mappedBy="customer", cascade={CascadeType.PERSIST,
CascadeType.REMOVE})
@OrderBy("createdDate DESC")
private List<Order> orders = new ArrayList<Order>();
...
@Entity
@Table(name="TB_ORDERS")
public class Order {
@ManyToOne
@JoinColumn(name="CUSTOMER_ID")
private Customer customer;
...
I recently noticed that when a new Order object is added to a Customer
object's Order List, the underlying Customer database table record gets
updated, even though the Customer object was not modified. This is
especially problematic since I have a database trigger defined on the
Customer table that inserts the old version of a record in a Customer
history table for auditing purposes whenever an update occurs.
I am currently using OpenJPA version 2.0.1. I have tried upgrading to
version 2.2.2, but still have the same problem. If I use Hibernate instead
of OpenJPA as the JPA implementation, the Customer database table does NOT
get updated.
Based on my understanding of JPA, the Customer record should not get updated
unless LockModeType.OPTIMISTIC_FORCE_INCREMENT is used (for optimistic
locking).
In case it matters, I am using build time enhancement. Here is the relevant
section from my Maven pom.xml file:
<plugin>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-maven-plugin</artifactId>
<version>${openjpa.version}</version>
<configuration>
<addDefaultConstructor>true</addDefaultConstructor>
</configuration>
<executions>
<execution>
<id>enhancer</id>
<phase>process-classes</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<version>${openjpa.version}</version>
</dependency>
</dependencies>
</plugin>
Any help or advice would be greatly appreciated.
Thanks,
Alain