无法使用JDO映射1:N单向关系

时间:2013-04-16 06:29:56

标签: java rdbms jdo datanucleus

我需要使用JDO Annotation(DataNuecles)映射 1:N单向关系。我有一个预定义的数据库。

关系是'用户'可以拥有一组'UserDescriptions'。我已经有两个名为'User'和'UserDescription'的表。这两个表之间没有定义的外键。表结构如下。我只会把必填字段

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

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

以下是我尝试在两个表格上方映射的代码。

@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”列创建外键。

我按照以下网址进行了映射。 http://www.datanucleus.org/products/datanucleus/jdo/orm/one_to_many_set.html#fk_uni

我该怎么做?

0 个答案:

没有答案