From dev-return-15664-apmail-openjpa-dev-archive=openjpa.apache.org@openjpa.apache.org Mon Mar 15 01:36:33 2010 Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 698 invoked from network); 15 Mar 2010 01:36:33 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 15 Mar 2010 01:36:33 -0000 Received: (qmail 81913 invoked by uid 500); 15 Mar 2010 01:35:48 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 81887 invoked by uid 500); 15 Mar 2010 01:35:48 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 81879 invoked by uid 99); 15 Mar 2010 01:35:48 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Mar 2010 01:35:48 +0000 X-ASF-Spam-Status: No, hits=-1008.1 required=10.0 tests=ALL_TRUSTED,AWL X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Mar 2010 01:35:47 +0000 Received: from brutus.apache.org (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 345E7234C052 for ; Mon, 15 Mar 2010 01:35:27 +0000 (UTC) Message-ID: <1056780769.258491268616927213.JavaMail.jira@brutus.apache.org> Date: Mon, 15 Mar 2010 01:35:27 +0000 (UTC) From: "Jerry Carter (JIRA)" To: dev@openjpa.apache.org Subject: [jira] Updated: (OPENJPA-1569) @Strategy triggers an InvalidStateException for fields which are declared as Java interfaces In-Reply-To: <49565728.242001268454687740.JavaMail.jira@brutus.apache.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/OPENJPA-1569?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Jerry Carter updated OPENJPA-1569: ---------------------------------- Priority: Minor (was: Major) (Set priority to minor as there are a number of workarounds.) While some argument might be made for supporting arbitrary types as recipients for @Strategy decoration, the spirit of JPA limits one to "user-defined types that implement the Serializable interface" (JPA 2.0, section 2.2). This is probably why the distinction is made in JavaTypes, but the implementation might be wrong. Rather than 'type == Serializable.class', mightn't this be 'Serializable.class.isAssignableFrom(type)'? > @Strategy triggers an InvalidStateException for fields which are declared as Java interfaces > -------------------------------------------------------------------------------------------- > > Key: OPENJPA-1569 > URL: https://issues.apache.org/jira/browse/OPENJPA-1569 > Project: OpenJPA > Issue Type: Bug > Affects Versions: 2.0.0-beta2 > Environment: MacOS X, Spring 3.0, Maven > Reporter: Jerry Carter > Priority: Minor > > The @Strategy annotation works fine for classes but does not work if the field is a Java interface. Consider: > @Persistent > @Strategy("SimpleHandler") > @Column(name="address_packed") > private BaseAddress address; > public BaseAddress getAddress() { return address; } > public void setAddress(BaseAddress address) { this.address = address; } > This works perfectly if BaseAddress is defined as a class but results in an InvalidStateException if it is an interface: > org.apache.openjpa.persistence.InvalidStateException: Encountered unmanaged object in persistent field "com.example.SimpleEntity.address" 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. > FailedObject: com.example.USAddress@4e0a39de > at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(SingleFieldManager.java:767) > at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:614) > at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:575) > at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:491) > at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2956) > at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:40) > at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:1048) > at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2051) > at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2011) > at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1782) > at org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:1015) > at org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:637) > ... etc ... > Here com.example.USAddress is a class which implements the BaseAddress interface. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.