Параметр подготовленной выписки не задан в DataNucleus - PullRequest
0 голосов
/ 19 июля 2010

Я пытаюсь вставить объект Employee в базу данных, используя DataNucleus 2.1.1, но параметр позиции внешнего ключа не устанавливается до выполнения подготовленного оператора "insert". Что я делаю, что препятствует установке параметра? Я что-то пропускаю? Чтение работает отлично.

DEBUG [DataNucleus.Datastore.Native] - INSERT INTO MYSCHEMA.EMPLOYEE ("NAME",POSITION_ID,ID) VALUES (<'John Doe'>,<UNPRINTABLE>,<100>)
WARN  [DataNucleus.Datastore.Persist] - Insert of object "com.example.staff.Employee@50 7895d8" using statement "INSERT INTO MYSCHEMA.EMPLOYEE ("NAME",POSITION_ID,ID) VALUES (?,?,?)" failed : Invalid operation: parameter 2 not set or registered

PersistenceManager pm = // obtain PersistenceManager
Position position = // obtain Position using pm (I can post this code upon request)
Employee employee =new Employee(100, "John Doe", position);
pm.makePersistent(employee);
pm.close();


<jdo>
<package name="com.example.staff">
    <class name="Position" identity-type="application" schema="MYSCHEMA" table="Position">
        <inheritance strategy="new-table"/>
        <field name="id" primary-key="true" persistence-modifier="persistent" default-fetch-group="true">
            <column name="ID" jdbc-type="integer"/>
        </field>
        <field name="title" persistence-modifier="persistent" default-fetch-group="true">
            <column name="TITLE" jdbc-type="varchar"/>
        </field>
    </class>
</package>
</jdo>

<jdo>
<package name="com.example.staff">
    <class name="Employee" identity-type="application" schema="MYSCHEMA" table="EMPLOYEE">
        <inheritance strategy="new-table"/>
        <field name="id" primary-key="true" persistence-modifier="persistent" default-fetch-group="true">
            <column name="ID" jdbc-type="integer"/>
        </field>
        <field name="name" persistence-modifier="persistent" default-fetch-group="true">
            <column name="NAME" jdbc-type="varchar"/>
        </field>
        <field name="position" persistence-modifier="persistent" default-fetch-group="true">
            <column name="POSITION_ID" jdbc-type="integer" />
        </field>
    </class>
</package>
</jdo>

@PersistenceCapable
public class Employee extends Object {
   private Integer id;
   private String name;
   private Position position;

   public Employee(Integer id, String name, Position position) {
      this.id =id;
      this.name =name;
      this.position =position;
      }
}

@PersistenceCapable
public class Position extends Object {
   private Integer id;
   private String title;
}

1 Ответ

0 голосов
/ 20 июля 2010

У меня нет таких проблем при этом.В моем случае я получаю объект Position с помощью pm.getObjectById (id).

...