0

JDO アノテーション (DataNuecles) を使用して1:N単方向関係をマップする必要があります。私は事前定義されたデータベースを持っています。

関係は、「ユーザー」は「UserDescriptions」のセットを持つことができるということです。「User」と「UserDescription」という 2 つのテーブルが既にあります。これら 2 つのテーブル間に定義済みの外部キーはありません。テーブル構造は次のとおりです。必須フィールドのみを入力します

**User**
-----
Id (pk) (int)
Name
---
---

**UserDescription**
-------------------
UserId (pk) (int)
LangId (pk) (varchar)
---
---

以下は、2 つのテーブルの上にマップしようとしたコードです。

@PersistenceCapable(detachable = "true")
public class User implements Serializable { 
   @PrimaryKey
   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
   @Column(jdbcType = "INTEGER", length = 11)
   private long id;
       -----
       -----
   @Element(column="USERID")
   private Set<UserDescription> userDescriptions;
}

@PersistenceCapable(objectIdClass = UserDescriptionPrimaryKey.class, detachable = "true")
public class UserDescription implements Serializable {

    private static final long serialVersionUID = 740988314686349952L;

    @PrimaryKey
    @Column(jdbcType = "INTEGER", length = 11)
    private long userId;
    @PrimaryKey
    @Column(jdbcType = "VARCHAR", length = 2)
    private String langCode;
}

次に、ユニットテストを実行して、スローと例外によって失敗した新しい「UserDescription」を挿入しました。

org.datanucleus.exceptions.NucleusDataStoreException: Insert of object "org.service.entity.db.UserDescription@2f6a23cf" using statement "INSERT INTO `USERDESCRIPTION` (`DESCRIPTION`,`CREATEDATE`,`UPDATEDATE`,`DELETEFLAG`,`LANGCODE`,`USERID`,`USERID`) VALUES (?,?,?,?,?,?,?)" failed : Column 'USERID' specified twice

また、上記の注釈により、「USERDESCRIPTIONS_ID_OWN」という追加の列が作成され、新しいフィールドの外部キーが設定されます。しかし、「UserDescription」テーブルの既存の「UserId」列の外部キーを作成したかったのです。

マッピングを行うために、次の URL に従いました。 http://www.datanucleus.org/products/datanucleus/jdo/orm/one_to_many_set.html#fk_uni

どうすればいいですか?

4

0 に答える 0