openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ognjen Blagojevic <ogn...@etf.bg.ac.yu>
Subject How to PERSIST object without loading references?
Date Thu, 03 Apr 2008 11:19:30 GMT
Hi all,

Is there a way to persist an Entity without loading all the referenced 
objects?

I know that this is possible:

Employee e = new Employe();
e.setName("John Doe");
e.setIdDepartment(findDepartmentByPrimaryKey(idDept));
e.setIdRank(findRankByPrimaryKey(idRank));
// and so on
em.persist(e);

But if I have a lot of references, and lot of INSERTS to do, this 
becames import with poor performace (before each INSERT statemet app 
must execute N selects).

It would be much faster if I can set references without looking them up:

Employee e = new Employe();
e.setName("John Doe");
Department dept = new Department();
dept.setIdDepartment(idDept);
e.setIdDepartment(dept);
// and so on
em.persist(e);

(Please note here: I'm not trying to insert new department, but rather 
to set a reference to existing one without looking it up in the database.)

But this seems impossible. Without CascadeType.PERSIST it throws 
something like:

<openjpa-1.0.2-r420667:627158 nonfatal user error> 
org.apache.openjpa.persistence.InvalidStateException: Encountered 
unmanaged object "mypackage.Department@18952cc" in persistent field 
"mypackage.Employee.idDepartment" of managed object 
"mypackage.Employee-5" during flush.  However, this field does not allow 
to be CascadeType.PERSIST.  You cannot flush unmanaged objects.

Ok, I add the CascadeType.PERSIST, and then:

org.apache.openjpa.persistence.InvalidStateException: The generated 
value processing detected an existing value assigned to this field: 
mypackage.Department.idDepartment.  This existing value was either 
provided via an initializer or by calling the setter method.  You either 
need to remove the @GeneratedValue annotation or modify the code to 
remove the initializer processing.


It must be a way to INSERT objects in the database without looking up 
for all the references, but I am not able to find it.

Regards,
Ognjen

Mime
View raw message