I raised this point about a year ago, this seems to be a catch all error 
because I would also get it on null fields intermittently when there was no DB 
constraint in effect. This was fixed by build time enhancement, but if you have 
a DB constraint then it doesn't seen to fix it as you have reported.   It 
doesn't appear to happen in 2.0.

Chris



-----Original Message-----
From: Trenton D. Adams [mailto:[email protected]] 
Sent: Wednesday, 26 May 2010 10:10 AM
To: [email protected]
Subject: Inappropriate error message

I was getting the following error with openjpa 1.2.1...
        <openjpa-1.2.1-r752877:753278 fatal user error> 
org.apache.openjpa.persistence.InvalidStateException: Encountered unmanaged 
object in persistent field 
"org.adamsbros.rmi.ledger.journal.JournalEntry.journalType" during flush.  
However, this field does not allow cascade persist. Set the cascade attribute 
for this field to CascadeType.PERSIST or CascadeType.ALL (JPA annotations) or 
"persist" or "all" (JPA orm.xml), or enable cascade-persist globally, or 
manually persist the related field value prior to flushing. You cannot flush 
unmanaged objects or graphs that have persistent associations to unmanaged 
objects.         

JournalEntry.journalType defined as...
    @ManyToOne
    @JoinColumn(name = "journal_type", referencedColumnName = "journal_type",
        nullable = false, table = "journal")

JournalType constructor was like this...
    @Id
    @Column(name = "journal_type")
    private String journalType;

    @Column(name = "description")
    private String description;

    public JournalType()
    {
    }
    // empty as you can see
    public JournalType(final String journalType)
    {
    }

Keep in mind that I do not want cascading to occur with the journalType in 
JournalEntry, as I will manage them separately.

As a result, creating a new JournalType would always result in empty instance 
variables.  I would have expected something like this from the postgresql db...
open_accounting=> INSERT INTO journal_types VALUES(null, null);
ERROR:  null value in column "journal_type" violates not-null constraint

But instead I get the obscure error about unmanaged objects.

Not sure if something similar would happen in openjpa 2, as openejb is not yet 
configured to use it.  But, if it does do the same thing, I would highly 
recommend changing something.  This took me about 20-30 minutes to see, maybe 
longer.  I was trying to compare my entities with other entities that were 
doing the exact same thing, and couldn't see any problems.  It just seemed so 
odd.  And it was all because my constructor was not doing it's proper 
initialization of the instance variables, from the values passed in.

Would you like me to post a bug report?

Reply via email to