You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Pål GD (JIRA)" <ji...@apache.org> on 2008/06/23 19:12:44 UTC
[jira] Created: (OPENJPA-641) ConcurrentModificationException with
self-referring entity-class when not running the enhancer
ConcurrentModificationException with self-referring entity-class when not running the enhancer
----------------------------------------------------------------------------------------------
Key: OPENJPA-641
URL: https://issues.apache.org/jira/browse/OPENJPA-641
Project: OpenJPA
Issue Type: Bug
Components: build / infrastructure, datacache, jpa
Affects Versions: 1.1.0, 1.0.2
Environment: Happens when not running the enhancer. Note that the problem also occurs when the Multithreaded property is set.
Reporter: Pål GD
Sometimes while fetching an instance of an entity-class with a self-reference (ManyToOne, for creating a hierarchy), I get a ConcurrentModificationException. This only seems to happen when the enhancer hasn't been loaded. Also it seems there has to be multiple levels in the hierarchy for this to occur.
I have created an example which reproduces the Exception.
The code:
@Entity
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne
@Column(name = "parent")
private A parent;
public A() {
name = "";
}
public A(String name) {
this.name = name;
}
public static void main(String[] args) {
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("system");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// a
A a = new A("a");
em.persist(a);
// b
A b = new A("b");
b.setParent(a);
em.persist(b);
// c
A c = new A("c");
c.setParent(b);
em.persist(c);
em.getTransaction().commit();
em.close();
// getting c's data
int cId = c.getId();
String cName = c.getName();
em = emf.createEntityManager();
em.getTransaction().begin();
//both methods of getting entity results in same error
// A newC = em.find(A.class, cId);
Query q = em.createQuery("SELECT a FROM A a WHERE a.name=:cName")
.setParameter(1, cName);
A newC = (A)q.getSingleResult();
em.getTransaction().commit();
em.close();
System.out.println(newC);
emf.close();
}
//getters and setters
}
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
<persistence-unit name="system" transaction-type="RESOURCE_LOCAL">
<class>no.tecwel.A</class>
<properties>
<!-- this has no effect
<property name="openjpa.Multithreaded" value="true"/> -->
<property name="openjpa.ConnectionURL" value="jdbc:mysql://db.home.local/system "/>
<property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
<property name="openjpa.ConnectionUserName" value="username"/>
<property name="openjpa.ConnectionPassword" value="password"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add,deleteTableContents',ForeignKeys='true')"/>
<property name="openjpa.Log" value="DefaultLevel=TRACE"/>
</properties>
</persistence-unit>
</persistence>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Closed: (OPENJPA-641) ConcurrentModificationException with
self-referring entity-class when not running the enhancer
Posted by "Catalina Wei (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/OPENJPA-641?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Catalina Wei closed OPENJPA-641.
--------------------------------
Assignee: Catalina Wei
Fix Version/s: 2.1.0
Resolution: Cannot Reproduce
Problem is not reproducible
> ConcurrentModificationException with self-referring entity-class when not running the enhancer
> ----------------------------------------------------------------------------------------------
>
> Key: OPENJPA-641
> URL: https://issues.apache.org/jira/browse/OPENJPA-641
> Project: OpenJPA
> Issue Type: Bug
> Components: build / infrastructure, datacache, jpa
> Affects Versions: 1.0.2, 1.1.0
> Environment: Happens when not running the enhancer. Note that the problem also occurs when the Multithreaded property is set.
> Reporter: Pål GD
> Assignee: Catalina Wei
> Fix For: 2.1.0
>
>
> Sometimes while fetching an instance of an entity-class with a self-reference (ManyToOne, for creating a hierarchy), I get a ConcurrentModificationException. This only seems to happen when the enhancer hasn't been loaded. Also it seems there has to be multiple levels in the hierarchy for this to occur.
> I have created an example which reproduces the Exception.
> The code:
> @Entity
> public class A {
> @Id
> @GeneratedValue(strategy = GenerationType.IDENTITY)
> private int id;
> private String name;
> @ManyToOne
> @Column(name = "parent")
> private A parent;
> public A() {
> name = "";
> }
> public A(String name) {
> this.name = name;
> }
> public static void main(String[] args) {
> EntityManagerFactory emf = Persistence
> .createEntityManagerFactory("system");
> EntityManager em = emf.createEntityManager();
> em.getTransaction().begin();
> // a
> A a = new A("a");
> em.persist(a);
> // b
> A b = new A("b");
> b.setParent(a);
> em.persist(b);
> // c
> A c = new A("c");
> c.setParent(b);
> em.persist(c);
> em.getTransaction().commit();
> em.close();
> // getting c's data
> int cId = c.getId();
> String cName = c.getName();
> em = emf.createEntityManager();
> em.getTransaction().begin();
> //both methods of getting entity results in same error
> // A newC = em.find(A.class, cId);
> Query q = em.createQuery("SELECT a FROM A a WHERE a.name=:cName")
> .setParameter(1, cName);
> A newC = (A)q.getSingleResult();
> em.getTransaction().commit();
> em.close();
> System.out.println(newC);
> emf.close();
> }
> //getters and setters
> }
> persistence.xml:
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> version="1.0">
> <persistence-unit name="system" transaction-type="RESOURCE_LOCAL">
> <class>no.tecwel.A</class>
> <properties>
> <!-- this has no effect
> <property name="openjpa.Multithreaded" value="true"/> -->
> <property name="openjpa.ConnectionURL" value="jdbc:mysql://db.home.local/system "/>
> <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
> <property name="openjpa.ConnectionUserName" value="username"/>
> <property name="openjpa.ConnectionPassword" value="password"/>
> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add,deleteTableContents',ForeignKeys='true')"/>
> <property name="openjpa.Log" value="DefaultLevel=TRACE"/>
> </properties>
> </persistence-unit>
> </persistence>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.