JPA Sequencing

Hi All,
I'm working with Toplink JPA. I'm trying work using sequence in toplink JPA.
What I'm doing is
@Id
@sequenceGenerator(name="seq_name" ,allocationSize=1)
@GeneratedValue(strategy=GeneratedType.SEQUENCE,generation="seq_name")
i am following the above steps but it is giving error as
select table_name.nextval from dual.
where should i mention this select query.
please send reply as early as possible
Thanks in advance,
regards,
satish

Thanks for your response Mr ailitche,
I'm able to work with sequence. I did not properly given the sequence generator name.
Now corrected that and it is working fine.
Thanks,
Satish

Similar Messages

  • JPA: Oracle Sequence Generator not up to date

    Hi,
    I'm using the JPA Oracle Sequence Generator in one of my JPA classes:
    @Entity
    @Table(name = "DACC_COST_TYPE")
    public class JPACostType implements Serializable {
    @SequenceGenerator(name = "CostTypeGenerator", sequenceName = "DACC_COST_TYPE_SEQ")
        @Column(name = "ID_COST_TYPE")
        @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CostTypeGenerator")
        private Integer idCostType;
    In order to persist a new object I perform the following code:
    @PersistenceContext
    private EntityManager em;
    JPACostType myJPA = new JPACostType();
    myJPA.setIdCostType = null;
    em.merge(myJPA);
    em.flush();
    Normally this works fine. But after deploying the app there sometimes happens an error:
    Caused by: javax.persistence.PersistenceException: SQLException while inserting entity {com.karmann.dacc.ejb.busilog.jpa.JPACostType(idCostType=4)}.
    at com.sap.engine.services.orpersistence.core.PersistenceContextImpl.flush(PersistenceContextImpl.java:278)
    at com.sap.engine.services.orpersistence.core.PersistenceContextImpl.beforeCompletion(PersistenceContextImpl.java:565)
    at com.sap.engine.services.orpersistence.entitymanager.EntityManagerImpl.beforeCompletion(EntityManagerImpl.java:410)
    at com.sap.engine.services.orpersistence.environment.AppJTAEnvironmentManager.beforeCompletion(AppJTAEnvironmentManager.java:197)
    at com.sap.engine.services.ts.jta.impl.TransactionImpl.commit(TransactionImpl.java:232)
    ... 52 more
    Caused by: java.sql.SQLException: ORA-00001: unique constraint (AEMA.DACC_COST_TYPE_PK) violated
    Obviously JPA does not fetch the new key by accessing the Oracle sequence. This documents "next value = 5". Does JPA fetch the new key from its cache? Is there any possibility to avoid this?
    Thanks for each hint,
    Christoph

    Hello Christoph Schäfer  ,
    I am stuck with a similar issue. I was able to save mutiple entries and there has not been much change to my JPA. I added new entities and new sequences.
    Now, I get the error Caused by: javax.persistence.PersistenceException: java.sql.SQLException: ORA-02289: Sequence ist nicht vorhanden.
    I have checked the name of sequence and sequence next val on the DB. It works on DB but when i execute it from ejb, it gives me thsi error. Now, it gives the error for all previously working JPA entities.
    I have also provided allocationSize = 1 for all entities.
    Please let me know, possible cause/solution to this issue.
    thank you.
    Regards,
    Sharath

  • Toplink JPA and handle to a sequence

    Hi All,
    I am trying to figure out a way to get a handle to an Oracle sequence and use it from the java application i.e. run operations like currval/nextval.
    The reason I need this flexibility is to refer 2 sequences from the java app and apply it on a single table. Currently the table i am trying to insert already has a sequence which is a primary key generator. We do refer it in our JPA annotations and this works fine.
    But there was a need where another column (not part of Primary key) also needs its values from a different sequence.
    When we try to refer it from Toplink JPA it does not allow and errors stating cannot have 2 sequences mapping for a single table entity.
    Let me know your thoughts.
    Thanks

    You could use a native SQL query to get the nextval or curval from the Sequence.
    TopLink/EclipseLink should support an API for this, or allow multiple sequences per object, please vote for these bugs,
    https://bugs.eclipse.org/bugs/show_bug.cgi?id=267701
    https://bugs.eclipse.org/bugs/show_bug.cgi?id=320456
    James : http://www.eclipselink.org

  • How to get generated sequence number from JPA/TopLink

    Hi there,
    I am using JDev 10.1.3.3 with JPA + POJO + TopLink.
    In the entity (POJO), I declared a sequence generated for a number field.
    @Id
    @GeneratedValue(strategy=SEQUENCE, generator="GEN_CUSTOMER_ID_SEQ")
    @SequenceGenerator(name="GEN_CUSTOMER_ID_SEQ", sequenceName="CUSTOMER_ID_SEQ", allocationSize=1)
    @Column(name="CUSTOMER_ID", nullable = false, precision = 12 )
    private Long customerId;
    In my program, I don't need to set the Id field because it is set automatically.
    However, I want to get the generated sequence using code. Is there a way?
    Thanks,
    Jim
    P.S. I cannot use getCustomerId because the value has not been set yet.

    If you call persist on the new Entity, or flush() the id will be assigned, and you can get it.
    There is also an API on the TopLink / EclipseLink Session getNextSequenceNumberValue(), that you can use to get a sequence value.
    -- James: http://www.eclipselink.org

  • Obtain/execute Sequence Generator in Toplink JPA

    Hi, I have an entity bean with a database sequence for its primary key.
    I can´t use something like:
    @Id
    @Column(name = "EMP_ID", nullable = false)
    @GeneratedValue(generator="EMPSEQ")
    @SequenceGenerator(name="EMPSEQ",sequenceName="EMP_SEQ", allocationSize=5)
    private Long id;
    because I need to know the new id of a new object before to persist it.
    That is:
    Employee newEmployee = new Employee();
    Long newId = sequencer.nextVal();
    newEmployee.setId();
    Long id = newEmployee.getId();
    entityManager.persist(newEmployee);
    I need to execute the sequence nextVal method to manualy set the id. How can I do that?

    The id will be assigned to the object when you commit the transaction or call flush.
    If you want to id back before you commit the transaction, calling EntityManager.flush() would be your best option.
    You could also access the TopLink UnitOfWork.assignSequenceNumber(Object) API directly if you wished.

  • JPA with MySQL-Data-Source

    Hello Forum,
    I have a question regarding usage of a MySQL-Data-Source in combination with JPA
    on the SAP NetWeaver Application Server, Java ™ EE 5 Edition.
    I have setup a custom datasource like explained in paper:
    "Working with Database Tables, DataSources and JMS Resources"
    - registered the database driver via telnet (Using mysql-connector-java-5.0.3-bin.jar)
    - created the data-sources.xml file underneath the META-INF dir of the EAR project
    [code]
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE data-sources SYSTEM "data-sources.dtd" >
    <data-sources>
      <data-source>
        <data-source-name>titan_cruises_ds</data-source-name>
        <driver-name>mysql-connector-java-5.0.3-bin.jar</driver-name>
         <init-connections>1</init-connections>
         <max-connections>10</max-connections>
         <max-time-to-wait-connection>60</max-time-to-wait-connection>
         <expiration-control>
              <connection-lifetime>600</connection-lifetime>
              <run-cleanup-thread>60</run-cleanup-thread>
         </expiration-control>
         <sql-engine>native_sql</sql-engine>
        <jdbc-1.x>
          <driver-class-name>com.mysql.jdbc.Driver</driver-class-name>
          <url>jdbc:mysql://ourHost.internal.com:3306/practise_titan_cruises</url>
          <user-name>myUser</user-name>
          <password>myPass</password>
        </jdbc-1.x>
      </data-source>
    </data-sources>
    [/code]
    After that I manually created the persistence.xml underneath the META-INF dir of the EJB project.
    [code]
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
         <persistence-unit name="titan_cruises_pu">
              <jta-data-source>titan_cruises_ds</jta-data-source>
         </persistence-unit>
    </persistence>
    [/code]
    After that I created the Entity named "Cabin" and the corresponding table within the db.
    Entity code:
    [code]
    package de.collogia.beans.pojo.ship;
    import java.io.IOException;
    import java.io.Serializable;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    This persisted POJO class models the cabin data.
    <p>
    In this class persistence annotations are placed on the getter methods
    of the attributes. This tells the persistence manager to access them
    via the corresponding get- and set-Methods.</p>
    (Unfortunately this does not work on NetWeaver and I had to place them
    on field level aggain...)
    @author Henning Malzahn ([email protected])
    svn-revision:         $Rev:: 670                                           $:
    svn-lasted-edited-by: $Author:: henning                                    $:
    svn-last-changed:     $Date:: 2007-02-21 21:49:51 +0100 (Wed, 21 Feb 2007) $:
    @Entity
    @Table(name = "cabin")
    public class Cabin implements Serializable {
        /** The generated serial version UID used for serialization. */
        private static final long serialVersionUID = -8522497314498903378L;
        /** The actual version number of this class used for serialization. */
        private static int actualVersion = 1;
        /** The cabin's id. */
        @Id
        @GeneratedValue
        @Column(name = "id")
        private long id;
        /** The cabin's name */
        @Column(name = "name")
        private String name;
        /** The cabin's deck level */
        @Column(name = "deck_level")
        private int deckLevel;
        /** The cabin's ship id */
        @Column(name = "ship_id")
        private int shipId;
        /** The cabin's bed count */
        @Column(name="bed_count")
        private int bedCount;
    /---- Serialization/ Deserialization methods -/
    Method that is responsible for deserialization of the object.
    @param in The <code>ObjectInputStream</code> object to read
              the data from.
    @throws IOException That may occur when reading from the
                        <code>ObjectInputStream</code> object
    @throws ClassNotFoundException That may occur when invoking the default
                                   deserialization mechanism.
        private void readObject(final java.io.ObjectInputStream in)
            throws IOException, ClassNotFoundException {
            /* Invoke default deserialization mechanism. */
            in.defaultReadObject();
            /* Read the actual version number of the class. */
            actualVersion =  in.readInt();
        } // End of readObject()
    Method that is responsible for serialization of the object.
    @param out The <code>ObjectOutputStream</code> object to write
               the data to.
    @throws IOException That may occur when writing to the
                        <code>ObjectOutputStream</code> object.
        private void writeObject(final java.io.ObjectOutputStream out)
            throws IOException {
            /* Invoke default serialization mechanism. */
            out.defaultWriteObject();
            /* Write the actual version number of the class. */
            out.writeInt(actualVersion);
        } // End of writeObject()
    /---- Defining constructors -/
    Private default constructor.
        private Cabin() {
        } // End of default constructor
    Full constructor.
    @param name The cabin's name.
    @param deckLevel The cabin's deck level.
    @param shipId The cabin's ship id.
    @param bedCount The cabin's bed count.
        public Cabin(final String name,
                     final int deckLevel,
                     final int shipId,
                     final int bedCount) {
            this.name = name;
            this.deckLevel = deckLevel;
            this.shipId = shipId;
            this.bedCount = bedCount;
        } // End of full constructor
    /---- Overridden class methods -/
    Returns a string representation of the cabin's data.
    @see java.lang.Object#toString()
        @Override
        public String toString() {
            StringBuffer strBuf = new StringBuffer();
            strBuf.append(this.name);
            strBuf.append("\n");
            strBuf.append(this.deckLevel);
            strBuf.append("\n");
            strBuf.append(this.shipId);
            strBuf.append("\n");
            strBuf.append(this.bedCount);
            return strBuf.toString();
        } // End of toString()
    /---- Defining instance methods -/
    Get method for the member "<code>id</code>".
    @return Returns the id.
        public long getId() {
            return this.id;
    Set method for the member "<code>id</code>".
    HTDODO hm: Check whether it is possible to have setId method
    using private accesss level with NetWeaver JPA-Provider!
    @param id The id to set.
        private void setId(final long id) {
            this.id = id;
    Get method for the member "<code>name</code>".
    @return Returns the name.
        public String getName() {
            return this.name;
    Set method for the member "<code>name</code>".
    @param name The name to set.
        public void setName(final String name) {
            this.name = name;
    Get method for the member "<code>deckLevel</code>".
    @return Returns the deckLevel.
        public int getDeckLevel() {
            return this.deckLevel;
    Set method for the member "<code>deckLevel</code>".
    @param deckLevel The deckLevel to set.
        public void setDeckLevel(final int deckLevel) {
            this.deckLevel = deckLevel;
    Get method for the member "<code>shipId</code>".
    @return Returns the shipId.
        public int getShipId() {
            return this.shipId;
    Set method for the member "<code>shipId</code>".
    @param shipId The shipId to set.
        public void setShipId(final int shipId) {
            this.shipId = shipId;
    Get method for the member "<code>bedCount</code>".
    @return Returns the bedCount.
        public int getBedCount() {
            return this.bedCount;
    Set method for the member "<code>bedCount</code>".
    @param bedCount The bedCount to set.
        public void setBedCount(final int bedCount) {
            this.bedCount = bedCount;
    } // End of class Cabin
    [/code]
    After that I created the TravelAgentBean, a Stateless Session Bean, implementing
    a remote interface that allows construction and persisting of new Cabin objects:
    [code]
    package de.collogia.beans.session.stateless;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import de.collogia.beans.pojo.ship.Cabin;
    Class that implements the <code>TravelAgentRemote</code> interface
    and defines the business methods of the TravelAgent service.
    @author Henning Malzahn ([email protected])
    svn-revision:         $Rev:: 670                                           $:
    svn-lasted-edited-by: $Author:: henning                                    $:
    svn-last-changed:     $Date:: 2007-02-21 21:49:51 +0100 (Wed, 21 Feb 2007) $:
    @Stateless
    public class TravelAgentBean implements TravelAgentRemote {
        /** The <code>Log</code> object for this class. */
    //    private static final Log LOGGER;
        /** The <code>PersistenceManager</code> object. */
        @PersistenceContext(unitName = "titan_cruises_pu")
        EntityManager em;
    /---- Static initializer -/
    //    static {
    //        LOGGER = LogFactory.getLog(TravelAgentBean.class);
    //    } // End of static initializer block
    /---- Implementing remote interface methods -/
    {@inheritDoc}
        public void createCabin(final Cabin cabin) {
            this.em.persist(cabin);
        } // End of createCabin()
    } // End of class TravelAgentBean
    [/code]
    After that I created a Controller class containing a main method that looks up the remote
    interface of the TravelAgentBena like explained in document "Accessing Enterprise JavaBeans Using JNDI
    in SAP NetWeaver Application Server, Java ™ EE 5 Edition" written by Validimir Pavlov of SAP NetWeaver
    development team.
    Unfortunately I receive an Exception after invoking the createCabin(...) method.
    On the console of the NWDS I receive:
    [code]
    javax.ejb.EJBException: Exception in getMethodReady() for stateless bean sap.com/test2Earannotation|test2Ejb.jarannotation|TravelAgentBean;
    nested exception is: com.sap.engine.services.ejb3.util.pool.PoolException: javax.ejb.EJBException: Cannot perform injection over bean instance
    Caused by: java.lang.RuntimeException: The persistence unit is inconsistent:
    The entity >>de.collogia.beans.pojo.ship.Cabin<< is mapped to the table >>cabin<<, which does not exist.
    [/code]
    But if I look at the log file located in "C:\NWAS_JAVAEE5\JP1\JC00\j2ee\cluster\server0\log\defaultTrace.0.trc"
    I see the real reason is:
    [code]
    [EXCEPTION]
    #6#1064#42000#You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax
    to use near '"cabin"' at line 1#collnx02.collogia.de:3306:null:practise_titan_cruises#select * from "cabin"#com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"cabin"' at line 1
         at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
         at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
         at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
         at com.mysql.jdbc.Connection.execSQL(Connection.java:3124)
         at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1149)
         at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1262)
         at com.sap.sql.jdbc.basic.BasicPreparedStatement.executeQuery(BasicPreparedStatement.java:99)
         at com.sap.sql.jdbc.direct.DirectPreparedStatement.executeQuery(DirectPreparedStatement.java:307)
         at com.sap.sql.jdbc.direct.DirectPreparedStatement.executeQuery(DirectPreparedStatement.java:264)
         at com.sap.engine.services.dbpool.wrappers.PreparedStatementWrapper.executeQuery(PreparedStatementWrapper.java:274)
    [/code]
    My goodness - what a long post - sorry for this - I hope I provided all information
    necessary to deal with the issue.
    Am I thinking in the right direction to blame attribute [code]<sql-engine>native_sql</sql-engine>[/code]
    of file data-sources.xml for the beaviour? Are there any other argument options than native_sql?
    Thanks in Advance!
    Henning Malzahn

    Hi Henning,
    > Despite the fact it's working now I have to do some
    > changes to my code currently
    > developed using JBoss/ Hibernate combination.
    > Hibernate allows you to have the
    > default no-arg constructor with private visibility -
    > any special reason for the fact that
    > only protected is allowed on NetWeaver?
    Here we strictly implemented the checks according to the requirements of the JPA specification. Technically, we could do with private constructors as well. But the JPA specifications requires the constructor to be protected to allow a JPA implementation to subclass entities if needed.
    > The entities in the project are final classes
    > so declaring a ctor protected doesn't really make
    > sense...
    For the same reason, your entities should not be final. Are we missing a check here ?
    > Also the persistence.xml parameter
    >
    hibernate.hbm2ddl.auto
    with the value of
    > create-drop is very useful while
    > developing the app - everytime you deploy the project
    > you get a fresh database.
    > Is there a comparable option for NetWeaver?
    No, unfortunately, there is no comparable option in SAP JPA (yet). We understand that there is a need for forward mapping. We would have liked to delegate this task to the JPA design time (i.e. Dali). However, we had to discover that Dali does not perform this task properly and we can't recommend using it any more.
    Consequently, there is no automatic schema generation in SAP JPA 1.0.
    >
    > Another thing is the extra TMP_SEQUENCE table which
    > isn't necessary using JBoss and
    > Hibernate - what's the reason for that?
    With Hibernate Entity Manager, the id generation strategy in use with GenerationType.AUTO depends on the database dialect. This means that depending on the database dialect, IDENTITY columns, SEQUENCES or generator tables (TableHiLo) are required. As Hibernate has the before mentioned schema generation property this fact can be hidden to the user.
    In SAP JPA, we are always using a table generator if GenerationType.AUTO is used. This allows for better portability across databases. It requires the table TMP_SEQUENCE. As we unfortunately do not have a schema generation capability, the user must create this table.
    Best regards,
    Adrian

  • JPA - TroubleShooting - Error in Datatypes used in Creating Tables

    h1. JPA - TroubleShooting - Error in Datatypes used in Creating Tables
    h2. Error Description
    The error appears when JPA is trying to automatically
    generate tables from Entities. It uses types it shouldn't because they aren't
    supported by the Database Engine. If you examine the createDDL.jdbc file you
    are going to find not supported data types. You could run the statements that
    are listed there directly to your Database Engine and find out that they don`t
    run generating syntax errors like the error posted below.
    h3. Query example (statement)
    CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50), SEQ_COUNT NUMBER(19))h3. PostgreSQL Error whent trying to execute the statment
    CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50),
    SEQ_COUNT NUMBER(19))": org.postgresql.util.PSQLException: ERROR: syntax
    error near "("
    h3. MSSQL 2000 Error when trying to execute the statement:
    [CREATE - 0 row(s), 0.578 secs] [Error Code: 2715, SQL State: HY000] [Microsoft][SQLServer 2000 Driver for
    JDBC][SQLServer]Column or parameter #1: Cannot find data type NUMBER
    h3. FireBird Error when trying to execute the statment
    Dynamic SQL Error
    SQL error code = -104
    Token unknown - line 1, char 62
    Statement: CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50),
    SEQ_COUNT NUMBER(19))
    h2. TroubleShooting
    Looks like it wants "NUMERIC", not "NUMBER".
    [http://www.postgresql.org/docs/8.1/interactive/datatype.html#DATATYPE-NUMERIC]
    I had this problem using Firebird. I found out it had to do
    with the database jdbc driver. I tried using a different database engine, like
    Microsoft SQL Server 2000 with the corresponding driver and it worked as it
    should. I suspect the JDBC driver has to supply in some way the datatypes it
    supports to JPA TopLink Library.
    Edited by: juanemc2 on Apr 1, 2008 7:39 AM

    In Hibernate you can supply the "dialect" to use for SQL generation. I assume TopLink to have a similar functionality.
    This is not a generic JPA issue, but rather something with the specific implementation you're using.
    Or rather it is a generic SQL issue, caused by different database engines using slightly (or not so slightly) different SQL syntax which causes problems when generating SQL automatically.

  • Help required to generate primary key sequence

    Hello All,
    I need your help in generating a sequence for primary key in my db table created using java dictionary project in my NWDS 7.3.
    The table column EMPL_ID is a primary and needs to be a sequence. The code in the JPA entity is as below. The underlying database is DB2 on Linux. Kindly help me resolve this issue.
    * The persistent class for the TMP_EMPL_DATA database table.
    @Entity
    @Table(name="TMP_EMPL_DATA")
    public class TmpEmplData implements Serializable {
         private static final long serialVersionUID = 1L;
         @Id
         @SequenceGenerator(name="EMPLID_GENERATOR", sequenceName="EMPID_SEQ", initialValue = 10000, allocationSize = 1)
         @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMPLID_GENERATOR")
         @Column(name="EMPL_ID")
         private String _emplId_;
    My bean class contains a public method as follows.
    public TmpEmplData createEmployee(String employeeName, int age, String location)
             TmpEmplData emplData = new TmpEmplData();
             emplData.set_emplName_(employeeName);
             emplData.setAge(age);
             emplData.setLocation(location);
             entityManager.persist(emplData);
             entityManager.find(TmpEmplData.class, emplData.get_emplId_());
             return emplData;
    During execution, i am getting an error as below.
    Caused by: javax.persistence.PersistenceException: The generated SQL statement is not valid for the underlying database platform (platform no. 99). For more details see attached exception. SQL statement is SELECT NEXT VALUE FOR "EMPID_SEQ" FROM ( VALUES (1) )
    at com.sap.engine.services.orpersistence.sqlmapper.mapping.JPASQLMapperImpl.createSequenceIDGeneratorSelectText(JPASQLMapperImpl.java:1239)
    at com.sap.engine.services.orpersistence.entitymanager.CachedJPASQLMapper.createSequenceIDGeneratorSelectText(CachedJPASQLMapper.java:259)
    at com.sap.engine.services.orpersistence.generator.GeneratorFactory.<init>(GeneratorFactory.java:156)
    at com.sap.engine.services.orpersistence.entitymanager.EntityManagerFactoryImpl$MetaDataImpl.<init>(EntityManagerFactoryImpl.java:323)
    at com.sap.engine.services.orpersistence.entitymanager.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:137)
    at com.sap.engine.services.orpersistence.entitymanager.JtaEntityManagerFactoryImpl.<init>(JtaEntityManagerFactoryImpl.java:39)
    at com.sap.engine.services.orpersistence.provider.PersistenceProviderImpl.createJtaEntityManagerFactory(PersistenceProviderImpl.java:251)
    at com.sap.engine.services.orpersistence.provider.PersistenceProviderImpl.createContainerEntityManagerFactory(PersistenceProviderImpl.java:236)
    at com.sap.engine.services.orpersistence.container.EMFInstanceCreator.getEntityManagerFactory(EMFInstanceCreator.java:134)
    at com.sap.engine.services.orpersistence.container.ORPersistenceObjectFactory.getEMF(ORPersistenceObjectFactory.java:300)
    at com.sap.engine.services.orpersistence.container.ORPersistenceObjectFactory.getObjectInstance(ORPersistenceObjectFactory.java:73)
    at com.sap.engine.lib.injection.ReferenceObjectFactory.getObject(ReferenceObjectFactory.java:96)
    at com.sap.engine.lib.injection.FieldInjector.inject(FieldInjector.java:113)
    ... 122 more
    Caused by: com.sap.engine.services.orpersistence.sqlmapper.generate.SQLMappingException: SQL statement is not valid for underlying database platform.
    at com.sap.engine.services.orpersistence.sqlmapper.common.CommonSQLMappingResult.getStatementString(CommonSQLMappingResult.java:237)
    at com.sap.engine.services.orpersistence.sqlmapper.mapping.JPASQLMapperImpl.createSequenceIDGeneratorSelectText(JPASQLMapperImpl.java:1237)
    ... 134 more
    Caused by: com.sap.sql.tree.StringRepresentationFailureException: Cannot represent next value expression as string.
    at com.sap.sql.tree.impl.OpenSqlTextExpert.nextValueExpressionToText(OpenSqlTextExpert.java:185)
    at com.sap.sql.tree.impl.NextValueExpressionBuilderImpl$NextValueExpressionImpl.toSqlTxt(NextValueExpressionBuilderImpl.java:140)
    at com.sap.sql.tree.impl.AbstractSqlTextExpert.selectSublistToText(AbstractSqlTextExpert.java:130)
    at com.sap.sql.tree.impl.SelectSublistImpl.toSqlTxt(SelectSublistImpl.java:150)
    at com.sap.sql.tree.impl.QuerySpecificationImpl.toSqlTxt(QuerySpecificationImpl.java:361)
    at com.sap.sql.tree.impl.SelectStatementImpl.toSqlTxt(SelectStatementImpl.java:139)
    at com.sap.sql.tree.impl.SQLStatementImpl.toSqlString(SQLStatementImpl.java:75)
    at com.sap.engine.services.orpersistence.sqlmapper.common.CommonSQLMappingResult.getStatementString(CommonSQLMappingResult.java:233)
    ... 135 more

    Hi,
    does the sequence exist? SAP JPA does not support creation of sequences, you have to create it manually.
    Maybe SAP JPA also does not support DB2 sequences with "Open SQL" correctly.
    - Tryp to set your data source to "native" or "vendor".
    - Try to turn on oracle compatibility:
    db2set DB2_COMPATIBILITY_VECTOR=ORA
    Regards
    Rolf

  • Jpa trouble

    hello
    can anyone help me with this problem
    atm i'm making a project which uses EJBs (with JPA) and some fields in the EJBs get auto generated when persisting an EJB entity to the database
    Writing to the database and reading out of it works perfectly, but when i persist a brand new entity to the table, i don't receive the brand new generated ID
    (ID is a primary key in the table)
    is there any way to update the persisted entity right after persisting it to the database ? so that my entity, which got persisted, gets his ID injected?
    this is my code for inserting a new entity into the database:
    @Transactional
    public class JPAScenarioDAO implements ScenarioDAO{
        private EntityManager entityManager;
         * Spring injects entityManager
         * @param entityManager manager that handles persistence operations
        @PersistenceContext
        public void setEntityManager(EntityManager entityManager)
          this.entityManager = entityManager;
        public JPAScenarioDAO() {}
        public void createScenario(Scenario scenario){
            entityManager.persist(scenario); // <-- help?
        public void updateScenario(Scenario scenario){
            entityManager.merge(scenario);
        public void removeScenario(Scenario scenario){
            entityManager.remove(scenario);
    }The scenario is an EJB that i generated from a table
    import java.io.Serializable;
    import java.sql.Timestamp;
    import java.util.List;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.NamedQueries;
    import javax.persistence.NamedQuery;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    @Entity
    @NamedQueries({
        @NamedQuery(name = "Scenario.getScenarios",
                    query = "select o from Scenario o"),
        @NamedQuery(name = "Scenario.getScenariosBetweenDates",
                    query = "select o from Scenario o where o.date >= :datum1 and o.date <= :datum2"),
        @NamedQuery(name = "Scenario.getScenariosByEdition",
                    query = "select o from Scenario o where o.edition = :edition"),
        @NamedQuery(name = "Scenario.getScenariosByIssue",
                    query = "select o from Scenario o where o.issue = :issue"),
        @NamedQuery(name = "Scenario.getLast2ScenariosFromEdition",
                    query = "select o from Scenario o where o.edition = :edition order by o.date desc")
    @Table(name = "WEBE_MAKR_DRAAIBOEK")
    public class Scenario implements Serializable {
        @Id
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="s_webe_makr_draaiboek")
        @Column(name="DRAAIBOEK_ID", nullable = false)
        private Long scenarioID;
        @Column(name="JAAR")
        private Long year;
        @Column(name="WEEK")
        private Long week;
        @Column(name="DATUM")
        private Timestamp date;
        @ManyToOne
        @JoinColumn(name = "EDITIE_ID", referencedColumnName = "EDITIE_ID")
        private Edition edition;
        @OneToMany(mappedBy = "scenario")
        private List<ScenarioItemStatus> scenarioItemStatusList;
        @ManyToOne
        @JoinColumn(name = "VERSCHIJNING_ID", referencedColumnName = "VERSCHIJNING_ID")
        private Issue issue;
        @OneToMany(mappedBy = "scenario")
        private List<ScenarioHistory> scenarioHistoryList;
        // CONSTRUCTOR
        public Scenario() {}
        // GETTERS
        public Long getScenarioID() {
            return scenarioID;
        public Long getYear() {
            return year;
        public Long getWeek() {
            return week;
        public Timestamp getDate() {
            return date;
        public Edition getEdition() {
            return edition;
        public Issue getIssue() {
            return issue;
        public List<ScenarioItemStatus> getScenarioItemStatusList() {
            return scenarioItemStatusList;
        public List<ScenarioHistory> getScenarioHistoryList() {
            return scenarioHistoryList;
        // SETTERS
        public void setScenarioID(Long scenarioID) {
            this.scenarioID = scenarioID;
        public void setDate(Timestamp date) {
            this.date = date;
        public void setYear(Long year) {
            this.year = year;
        public void setWeek(Long week) {
            this.week = week;
        public void setEdition(Edition edition) {
            this.edition = edition;
        public void setIssue(Issue issue) {
            this.issue = issue;
        public void setScenarioItemStatusList(List<ScenarioItemStatus> scenarioItemStatusList) {
            this.scenarioItemStatusList = scenarioItemStatusList;
        public void setScenarioHistoryList(List<ScenarioHistory> scenarioHistoryList) {
            this.scenarioHistoryList = scenarioHistoryList;
        // EXTRA METHODS
        public ScenarioItemStatus addScenarioItemStatus(ScenarioItemStatus scenarioItemStatus) {
            getScenarioItemStatusList().add(scenarioItemStatus);
            scenarioItemStatus.setScenario(this);
            return scenarioItemStatus;
        public ScenarioItemStatus removeScenarioItemStatus(ScenarioItemStatus scenarioItemStatus) {
            getScenarioItemStatusList().remove(scenarioItemStatus);
            scenarioItemStatus.setScenario(null);
            return scenarioItemStatus;
        public ScenarioHistory addScenarioHistory(ScenarioHistory scenarioHistory) {
            getScenarioHistoryList().add(scenarioHistory);
            scenarioHistory.setScenario(this);
            return scenarioHistory;
        public ScenarioHistory removeScenarioHistory(ScenarioHistory scenarioHistory) {
            getScenarioHistoryList().remove(scenarioHistory);
            scenarioHistory.setScenario(null);
            return scenarioHistory;
    }Edited by: NeoSniperkiller on 17-apr-2008 14:44

    public void createScenario(Scenario scenario){
            entityManager.persist(scenario); // <-- help?
        }I've seen this happen.
    Changing it to
    public Scenario createScenario(Scenario scenario){
            entityManager.persist(scenario); // <-- help?
            return scenario;
        }(and using the returned value) for some reason worked.
    Not quite sure yet why, I'll have to do some research to figure out exactly what happens.

  • JPA and SQL Server 2005's  Identity Don't Play Nice

    I am hoping someone with a little more senior knowledge of JPASQL Server 2005 can point me in the right direction involving SQL Server 2005.
    What I am discovering is JPA and SQL Server 2005 do not playing nice together when you use the IDENTITY capability for
    a primary key. Let me explain. "...when using the IDENTITY as the generator type, the value for the identity field MAY NOT be
    available BEFORE the entity data is saved in the database because typically it is generated when a record is committed."
    My problem is this.
    I have two separate entities using another entity, for example a car has a wheel and a truck has a wheel. I can go through the steps
    of persisting the car and the wheel with no problem. My problem begins when I try to
    find the wheel (by wheel description) for the truck. The query finds the wheel, but does not return the primary key for wheel.
    Therefore, using the PK inside a query generates this error:
    java.lang.IllegalArgumentException: An instance of a null PK has been incorrectly provided for this find operation. What has been my appraoch to get the entity to commit to the database is to use the following sequence for the Entity Manager.
    entityManager.persist(wheel);
    entityManager.flush(); I have assumed to this point this action would persist my data because I have been able to retrieve the PK immidately after these steps.
    However, multiple actions taking place within the same transaction, appears to render the persist and flush steps useless. My initial thought
    is to wrap the wheel creation within a new transaction so when the method/transaction completes, the data would be in the database. This
    has not worked.
    I hope I have explained this clear for others to follow. I apologize in advance if I have not. Any suggestions are greatly appreciated.

    I am hoping someone with a little more senior knowledge of JPASQL Server 2005 can point me in the right direction involving SQL Server 2005.
    What I am discovering is JPA and SQL Server 2005 do not playing nice together when you use the IDENTITY capability for
    a primary key. Let me explain. "...when using the IDENTITY as the generator type, the value for the identity field MAY NOT be
    available BEFORE the entity data is saved in the database because typically it is generated when a record is committed."
    My problem is this.
    I have two separate entities using another entity, for example a car has a wheel and a truck has a wheel. I can go through the steps
    of persisting the car and the wheel with no problem. My problem begins when I try to
    find the wheel (by wheel description) for the truck. The query finds the wheel, but does not return the primary key for wheel.
    Therefore, using the PK inside a query generates this error:
    java.lang.IllegalArgumentException: An instance of a null PK has been incorrectly provided for this find operation. What has been my appraoch to get the entity to commit to the database is to use the following sequence for the Entity Manager.
    entityManager.persist(wheel);
    entityManager.flush(); I have assumed to this point this action would persist my data because I have been able to retrieve the PK immidately after these steps.
    However, multiple actions taking place within the same transaction, appears to render the persist and flush steps useless. My initial thought
    is to wrap the wheel creation within a new transaction so when the method/transaction completes, the data would be in the database. This
    has not worked.
    I hope I have explained this clear for others to follow. I apologize in advance if I have not. Any suggestions are greatly appreciated.

  • Toplink Essentials JPA doesn't use GenerationType.IDENTITY

    Based on EJB 3 and JPA I want to store some entities (@Entity) in a database. For some of those entites the database auto increments the primary key. In these cases I defined a @TableGenerator and a @GeneratedValue using GenerationType.IDENTITY as strategy in order to get the primary key (@Id) updated after the entity has been persisted.
    Short example:
    @Entity
    @Table(name = "orders")
    public class POrder implements PEntity {
         @TableGenerator(name = "orderIdGenerator", initialValue = 0, allocationSize = 1)
         @Id
         @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "orderIdGenerator")
         @Column(name = "orderNumber", nullable = false)
         private Integer orderNumber;
    ...I am running the application on GlassFish. I added a corresponding JDBC resource to the server configuration, using the specific MySql driver interfaces.
    Persisting entities which doesn't use a TableGenerator works, but as soon as I try to persist an entity which should use a TableGenerator I am running in the following exception:
    beergame.server.exception.BeergameServerException: nested exception is: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b55-fcs (10/10/2008))): oracle.toplink.essentials.exceptions.DatabaseException
    Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'beergame3.sequence' doesn't exist
    Error Code: 1146
    Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
         bind => [1, roleIdGenerator]
    Query: DataModifyQuery()
    Local Exception Stack:
    Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b55-fcs (10/10/2008))): oracle.toplink.essentials.exceptions.DatabaseException
    Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'beergame3.sequence' doesn't exist
    Error Code: 1146
    Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
         bind => [1, roleIdGenerator]
    Query: DataModifyQuery()
         at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:311)
         at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:654)
         at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:703)
         at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:492)
         at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:452)
         at oracle.toplink.essentials.internal.sessions.AbstractSession.executeCall(AbstractSession.java:690)
         at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
         at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:214)
         at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:257)
         at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:237)
         at oracle.toplink.essentials.queryframework.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:86)
         at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628)
         at oracle.toplink.essentials.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:1845)
         at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
         at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:924)
         at oracle.toplink.essentials.sequencing.QuerySequence.update(QuerySequence.java:344)
         at oracle.toplink.essentials.sequencing.QuerySequence.updateAndSelectSequence(QuerySequence.java:283)
         at oracle.toplink.essentials.sequencing.StandardSequence.getGeneratedVector(StandardSequence.java:96)
         at oracle.toplink.essentials.sequencing.Sequence.getGeneratedVector(Sequence.java:281)
         at oracle.toplink.essentials.internal.sequencing.SequencingManager$Preallocation_Transaction_NoAccessor_State.getNextValue(SequencingManager.java:420)
         at oracle.toplink.essentials.internal.sequencing.SequencingManager.getNextValue(SequencingManager.java:846)
         at oracle.toplink.essentials.internal.sequencing.ClientSessionSequencing.getNextValue(ClientSessionSequencing.java:110)
         at oracle.toplink.essentials.internal.descriptors.ObjectBuilder.assignSequenceNumber(ObjectBuilder.java:240)
         at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.assignSequenceNumber(UnitOfWorkImpl.java:355)
         at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNotRegisteredNewObjectForPersist(UnitOfWorkImpl.java:3266)
         at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.registerNotRegisteredNewObjectForPersist(RepeatableWriteUnitOfWork.java:432)
         at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:3226)
         at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:221)
         at com.sun.enterprise.util.EntityManagerWrapper.persist(EntityManagerWrapper.java:440)
         at beergame.server.model.trans.impl.TExtensionOfPEntityImpl.persist(TExtensionOfPEntityImpl.java:130)
         at beergame.server.model.trans.impl.TRoleImpl.<init>(TRoleImpl.java:61)
         at beergame.server.logic.trans.impl.GameLogicImpl.assignUserToValueChainLevel(GameLogicImpl.java:81)
         at beergame.server.logic.remote.impl.UserSessionBean.createGame(UserSessionBean.java:65)
    I wonder why a sequence table has to be update whereas IDENTITY is defined as strategy. I tried also AUTO as strategy but it doesn' matter, the result is the same.
    I read several posts in forums, but couldn't find a solution. So I still have no idea how to get IDENTITY used as strategy. Any one of you does?
    My configuration:
    IDE: Eclipse 3.4.0
    Server: GlassFish V2 Java EE 5
    JPA Implementation: Toplink Essentials v2.1-b55
    JPA driver: oracle.toplink.essentials.PersistenceProvider
    Database: MySQL 5.0.51a
    JDBC driver: mysql-connector-java-5.1.5

    I did it. I must admit, I was a little bit confused by the annotation TableGenerator. It is not responsible for generating ids of a table at all but only in conjunction with a table which should provide ids.
    After I removed @TableGenerator and also the corresponding reference within @GeneratedValue the persistence works as expected. Now the code looks like this:
    @Entity
    @Table(name = "orders")
    public class POrder implements PEntity {
         @Id
         @GeneratedValue(strategy = GenerationType.IDENTITY)
         @Column(name = "orderNumber", nullable = false)
         private Integer orderNumber;
    ...Edited by: TomCat78 on Oct 12, 2008 3:38 PM

  • JPA: Complex query needed to load object / special processing on store

    I have what I think is a tricky situation with an ORM scenario, and I am wondering what I need to do to get JPA to work with this situation:
    I have a table that looks like:
    key_with_rev_id INTEGER (sequence based, unique pk)
    key_id INTEGER (sequence based)
    rev_id INTEGER (sequence based, with key_id forms unique index)
    del_flag VC(1)
    + various data fields
    The object would contain these attributes (preferably):
    key_id (as the "unique" id)
    max_rev_id (transient, defaults to null)
    + various data attributes
    When I load it -- for max_rev_id = null, it should basically do this:
    select <data fields> from revved_table
    where key_id = <object.key_id>
    and rev_id = (select max(rev_id) from revved_table where key_id = <object.key_id>)
    and del_flag is null or del_flag = 'N'
    The query is a little more complex when max_rev_id is not null, but same idea.
    Now then -- when I store the object, whether it is to insert or update, I want it to always insert rows, with the key_with_rev_id and rev_id values from the corresponding sequences. (On insert, it will also use another seq to populate key_id). When I delete, I also want to insert a new row, but set del_flag = 'Y'
    Is this too complex for JPA such that it would be a huge hassle, or is there an elegant way to set this up?
    My apologies for any unusual terminology in the above -- I am quite new to JPA.
    Thanks,
    ken clark

    Does anyone have any suggestions as to where to start looking?
    Thanks,
    ken

  • JDeveloper, JPA named query String parameter with length of 1

    Hi,
    I use JDeveloper 11.1.1.2.0. and have the following table:
    CREATE SEQUENCE COUNTRY_SEQ;
    CREATE TABLE COUNTRY (
    COUNTRY_ID NUMBER NOT NULL,
    COUNTRY_NAME VARCHAR2(40),
    COUNTRY_CODE CHAR(2) NOT NULL,
    CONSTRAINT COUNTRY_ID_PK PRIMARY KEY (COUNTRY_ID)
    INSERT INTO COUNTRY VALUES (COUNTRY_SEQ.NEXTVAL, 'Belgium', 'B');
    INSERT INTO COUNTRY VALUES (COUNTRY_SEQ.NEXTVAL, 'Netherlands', 'NL');
    COMMIT;
    I made a JPA Entity with two queries:
    @NamedQueries({
    @NamedQuery(name = "Country.findAll", query = "select o from Country o"),
    @NamedQuery(name = "Country.findByCountryCode", query = "select o from Country o where o.countryCode = 'B' or o.countryCode ='NL'")
    The first works fine, gives back both B and NL. But the second gives back only NL. I have no clue why.
    If I change 'B' to 'BE' both in the DB and the code, it works. If I change to 'b', it doesn't. So it seems that the problem comes with 1 char long Strings.
    Is it an EclipseLink bug?
    I use Oracle Database 11g Enterprise Edition Release 11.1.0.7.0. But
    SELECT COUNTRY_ID, COUNTRY_NAME, COUNTRY_CODE FROM COUNTRY WHERE COUNTRY_CODE = 'B' OR COUNTRY_CODE = 'NL';
    works in SQL*Plus.
    Thx, Donat

    Hi,
    That's true, it uses value bindings while the values are hard coded. I use the default EclipseLink embedded into JDeveloper 11.1.1.2, with the default settings. The JPA bean runs in the default embedded WebLogic of JDeveloper. This might be a default setting of EclipseLink to use bindings for hard coded values.
    Here is a fragment of Country.java:
    @Entity
    @NamedQueries({
    //@NamedQuery(name = "Country.findAll", query = "select o from Country o")
    @NamedQuery(name = "Country.findAll", query = "select o from Country o where o.countryCode ='B' or o.countryCode ='NL'")
    public class Country implements Serializable {
    @Id
    @Column(name="COUNTRY_ID", nullable = false)
    private Long countryId;
    @Column(name="COUNTRY_CODE", nullable = false)
    private String countryCode;
    @Column(name="COUNTRY_NAME", length = 40)
    private String countryName;
    And I have a JavaServiceFacade.java:
    public class JavaServiceFacade {
    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("EjbModel-1-Outside");
    public JavaServiceFacade() {
    public static void main(String [] args) {
    final JavaServiceFacade javaServiceFacade = new JavaServiceFacade();
    List<Country> countries;
    countries = javaServiceFacade.getCountryFindAll();
    for (Country country : countries) {
    System.out.println(country.getCountryCode());
    private EntityManager getEntityManager() {
    return emf.createEntityManager();
    /** <code>select o from Country o</code> */
    public List<Country> getCountryFindAll() {
    return getEntityManager().createNamedQuery("Country.findAll").getResultList();
    BR, Donat

  • JPA named query String parameter with length of 1

    Hi,
    I use JDeveloper 11.1.1.2.0. and have the following table:
    CREATE SEQUENCE COUNTRY_SEQ;
    CREATE TABLE COUNTRY (
    COUNTRY_ID NUMBER NOT NULL,
    COUNTRY_NAME VARCHAR2(40),
    COUNTRY_CODE CHAR(2) NOT NULL,
    CONSTRAINT COUNTRY_ID_PK PRIMARY KEY (COUNTRY_ID)
    INSERT INTO COUNTRY VALUES (COUNTRY_SEQ.NEXTVAL, 'Belgium', 'B');
    INSERT INTO COUNTRY VALUES (COUNTRY_SEQ.NEXTVAL, 'Netherlands', 'NL');
    COMMIT;
    I made a JPA Entity with two queries:
    @NamedQueries({
    @NamedQuery(name = "Country.findAll", query = "select o from Country o"),
    @NamedQuery(name = "Country.findByCountryCode", query = "select o from Country o where o.countryCode = 'B' or o.countryCode ='NL'")
    The first works fine, gives back both B and NL. But the second gives back only NL. I have no clue why.
    If I change 'B' to 'BE' both in the DB and the code, it works. If I change to 'b', it doesn't. So it seems that the problem comes with 1 char long Strings.
    Is it an EclipseLink bug?
    I use Oracle Database 11g Enterprise Edition Release 11.1.0.7.0. But
    SELECT COUNTRY_ID, COUNTRY_NAME, COUNTRY_CODE FROM COUNTRY WHERE COUNTRY_CODE = 'B' OR COUNTRY_CODE = 'NL';
    works in SQL*Plus.
    Thx, Donat

    I moved this question to: Forum Home » Java Enterprise & Remote Computing » Enterprise JavaBeans
    Donat

  • Generating value of column using sequence in Toplink

    Hi
    I have a toplink pojo table, say SamplePojo. I need to automatically generate a value for the primary key field, say id. Is it possible to insert only the name field into the table and let toplink generate a value for id field using sequence?
    I try the following code from my client class
    Project project = XMLProjectReader.read("META-INF/tlMap.xml", Thread.currentThread().getContextClassLoader());
    DatabaseSession session = project.createDatabaseSession();
    session.shouldLogMessages();
    session.login();
    String query = "insert into SAMPLE_POJO(NAME) values('SAMPLE NAME')";               
    session.executeSQL(query);
    session.logout();If i execute the above code i get a error like "Internal Exception: java.sql.SQLException: ORA-01400: cannot insert NULL into ("MYSCHEMA"."SAMPLE_POJO"."ID")"
    This is how my SamplePojo class looks like
    @Entity
    public class SamplePojo iimplements Serializablel {
        @Id
        @GeneratedValue(generator = "sampleSequence")
        @SequenceGenerator(name = "sampleSequence", sequenceName = "SAMP_SEQ", allocationSize = 1)
        private BigDecimal id;
        private String name;
        public SamplePojo(BigDecimal id, String name) {
            this.name = name;
            this.id = id;
    //getters and setters for class variables
    }

    Are you trying to use JPA, or the native TopLink API?
    Your annotations are JPA, but your code is the native API, using the XMLProjectReader.read("META-INF/tlMap.xml"), either use one or the other.
    With JPA, you will just have a persistence.xml, and optionally an orm.xml (you will not use the Mapping Workbench).
    To insert an object you just create an instance of the class and call persist(), no SQL.
    i.e.
    EntityManager em = factory.createEntityManager();
    em.getTransaction().begin();
    SamplePojo pojo = new SamplePojo();
    pojo.setName("SAMPLE NAME");
    em.persist(pojo);
    em.getTransaction().commit();
    James : http://www.eclipselink.org

Maybe you are looking for

  • Why is my mic suddenly not working in PPro CS4?

    Hi I have a mac running CS4 Premiere Pro. I'm using a SM57 mic which I plug into a pre-amp to boost the sound and then from this box I plug into the line-in slot on my mac. I'm recording simple voice-overs over silent footage. It's all been working b

  • Explore tag is not visible to open Finanacial reporting in Workspace

    Hi, I have installed Hyperion 11.1.2.2. I am able to access Essbase and workspace. But, explore Tag is not available in workspace to open Financial reports. Could any one of you please suggest what might be the reason. Thanks Sri

  • TS5388 I do not have a documents & data tab in settings for iCloud??

    Unable to publish Projects or Slideshow. Default instructs me to turn on Documents & Data in iCloud settings. iCloud settings does not include that option. Please advise. Thanks

  • What difference on ABAP language between 2004 version and before version

    Hi everyone, Does there exist difference about ABAP language between 2004 version and before version? If it does, what's that? For example, what's new keywords? Which old key words can't be applied on 2004 platform any more? Any suggestion is highly

  • Student Project - Slide Show

    Hi, I've been reading through the Director MX User Guide and Help function but I'm still not able to get my Play, Pause and Stop buttons to work right. Here's what I'm trying to do: I have a slide presentation that I made in Director MX for my class