openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kevin Sutter <kwsut...@gmail.com>
Subject Re: OpenJPA 2.2.0 , Oracle Issue
Date Thu, 31 Jan 2013 17:25:43 GMT
I didn't spend a lot of time analyzing your specific scenario, but I did
notice this in your persistence.xml:

                   <property name="openjpa.RuntimeUnenhancedClasses"
value="supported" />

Do not use this property.  I know it's available and documented, but it's
not a recommended practice [1].  The subclassing process for enhancement is
not ready for prime time and should not be used in a production
environment.  It was originally meant for quick, out-of-box
experimentation.  Nothing more.  We should probably remove the option
altogether, but there may be some customers that accidentally having luck
with it...

Please use one of the better enhancement alternatives mentioned on that
page.  I'm not guaranteeing that your original issue will go away with the
better enhancement processing, but in the long run, it's the right answer.

Kevin

[1]  http://openjpa.apache.org/entity-enhancement.html

On Thu, Jan 31, 2013 at 12:10 AM, darapaneedi <
sudharshan.darapaneedi@gmail.com> wrote:

> Hello All,
>
>            Our project was using postgres which is now migrated to oracle.
> All entities are now have sequence to fetch the new id. But i am facing
> strange issue while saving object graph. Parent entity is not firing insert
> statement, but child entity is firing many insert statements which number
> is
> equivalent to number of parent. Means if if there are 2 parent entities
> then
> (2+1) insert statement for child are firing.  i verified cascade operation
> is set to ALL.
>
> Example, i have 2 entities PropertyCategory (parent table) and Property
> (child table).
>
> @Entity
> public class Property implements Serializable {
>
> private Integer propertyId;
>
>         @Id
>         @GeneratedValue(strategy=GenerationType.SEQUENCE, generator =
> "PROP_SEQ")
>         @SequenceGenerator(name="PROP_SEQ", sequenceName =
> "PROP_SEQ",initialValue=1,allocationSize=1)
>
>         @Column(name="property_id")
>         public Integer getPropertyId() {
>                 return this.propertyId;
>         }
>
>         public void setPropertyId(Integer propertyId) {
>                 this.propertyId = propertyId;
>         }
>
> @ManyToOne(cascade={CascadeType.ALL})
>
> @JoinColumn(name="property_category_id",insertable=true,updatable=false)
>         public PropertyCategory getPropertyCategory() {
>                 return this.propertyCategory;
>         }
>
> // other stuff
>
> }
>
>
> @Entity
> @Table(name="property_category")
> public class PropertyCategory implements Serializable {
>
>
>         @Id
>         @Column(name="property_category_id")
>         @GeneratedValue(strategy=GenerationType.SEQUENCE, generator =
> "PROP_CAT_SEQ")
>         @SequenceGenerator(name="PROP_CAT_SEQ", sequenceName =
> "PROP_CAT_SEQ",initialValue=1,allocationSize=1)
>         public Integer getPropertyCategoryId() {
>                 return this.propertyCategoryId;
>         }
>
>
> @OneToMany(mappedBy="propertyCategory",cascade=CascadeType.ALL)
>         public List<Property> getProperties() {
>                 return this.properties;
>         }
>
> }
>
>
>
> in persistence.xml
>
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>         <persistence-unit name="punit" transaction-type="RESOURCE_LOCAL">
>
> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>
> <class>com.nsn.bss.sao.platform.persistence.model.PropertyCategory</class>
>
> <class>com.nsn.bss.sao.platform.persistence.model.Property</class>
>
>                 <properties>
>                         <property name="openjpa.Log"
> value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE" />
>                         <property name="openjpa.jdbc.DBDictionary"
> value="JoinSyntax=sql92" />
>                         <property name="jboss.as.jpa.providerModule"
> value="org.apache.openjpa" />
>                         <property name="openjpa.jdbc.Schemas"
> value="SELFCARE4"/>
>
>
>
>                    <property name="openjpa.DynamicEnhancementAgent"
> value="false"/>
>                    <property name="openjpa.RuntimeUnenhancedClasses"
> value="supported" />
>                 </properties>
>
>         </persistence-unit>
> </persistence>
>
>
>
> In my testcase ,
>
>
> @RunWith(SpringJUnit4ClassRunner.class)
> @ContextConfiguration(locations = { "classpath:/applicationContext.xml" })
> @TransactionConfiguration(defaultRollback=false)
> @Transactional(readOnly=false,propagation=Propagation.REQUIRES_NEW)
> public class OracleTest {
>
>         @Autowired
>         private JpaTemplate jpaTemplate;
>
>         @Test
>         public void testPropertySave(){
>
>                 PropertyCategory category = new PropertyCategory();
>                 category.setPropertyCategoryName( "JUNIT" );
>
>                 Property property = new Property();
>
>                 property.setPropertyCategory(category);
>
>                 jpaTemplate.persist( property );
>         }
>
> }
>
>
>
>
> in the console i can see,
>
> 12296  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> executing prepstmnt 11850652 SELECT t0.property_category_name
> FROM
> SELFCARE4.property_category t0 WHERE t0.property_category_id = ? [params=?]
> 12429  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> [133 ms] spent
> 12461  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> executing prepstmnt 11357504 ALTER SEQUENCE SELFCARE4.PROP_SEQ
> 12486  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> [25 ms] spent
> 12486  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> executing prepstmnt 5493711 SELECT SELFCARE4.PROP_SEQ.NEXTVAL
> FROM
> DUAL
> 12524  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> [38 ms] spent
> 12527  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> executing prepstmnt 24567316 ALTER SEQUENCE
> SELFCARE4.PROP_CAT_SEQ
> 12535  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> [7 ms] spent
> 12535  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> executing prepstmnt 15606261 SELECT
> SELFCARE4.PROP_CAT_SEQ.NEXTVAL
> FROM DUAL
> 12539  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> [4 ms] spent
> 12609  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> executing prepstmnt 33517025 INSERT INTO SELFCARE4.Property
> (property_id, derivation_expression, derived, display, multilingual, name,
> readonly, data_type_id, property_category_id) VALUES (?, ?, ?, ?, ?, ?, ?,
> ?, ?) [params=?, ?, ?, ?, ?, ?, ?, ?, ?]
> 13089  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> [480 ms] spent
> 13092  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> executing prepstmnt 20669019 INSERT INTO SELFCARE4.Property
> (property_id, derivation_expression, derived, display, multilingual, name,
> readonly, data_type_id, property_category_id) VALUES (?, ?, ?, ?, ?, ?, ?,
> ?, ?) [params=?, ?, ?, ?, ?, ?, ?, ?, ?]
> 13095  sao-platform  TRACE  [main] openjpa.jdbc.SQL - <t 26384885, conn
> 13563633> [3 ms] spent
>
> then constraint violation exception.......which is obvious since parent
> hasnt inserted yet.
>
>
> As you can see there are 2 insert statements for Property.
>
> 1. Am i missing any configurations in persistence.xml for this weird
> behaviour ?
> 2. why there are alter statements for Sequence??
>
>
>
> Thanks
> Darapaneedi
>
>
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/OpenJPA-2-2-0-Oracle-Issue-tp7582658.html
> Sent from the OpenJPA Developers mailing list archive at Nabble.com.
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message