我需要使用 JDO Annotation (DataNuecles) 映射1:N 单向关系。我有一个预定义的数据库。
关系是,“用户”可以有一组“用户描述”。我已经有两个名为“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”列创建外键。
我按照以下 URL 进行映射。 http://www.datanucleus.org/products/datanucleus/jdo/orm/one_to_many_set.html#fk_uni
我该怎么做?