Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用JDO映射1:N单向关系_Java_Rdbms_Jdo_Datanucleus - Fatal编程技术网

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

Java 无法使用JDO映射1:N单向关系,java,rdbms,jdo,datanucleus,Java,Rdbms,Jdo,Datanucleus,我需要使用JDO注释(DataNuecles)映射1:N单向关系。我有一个预定义的数据库 关系是,“用户”可以有一组“用户描述”。我已经有了两个名为“User”和“UserDescription”的表。这两个表之间没有定义的外键。表结构如下。我将只放置必填字段 **User** ----- Id (pk) (int) Name --- --- **UserDescription** ------------------- UserId (pk) (int) LangId (pk) (varch

我需要使用JDO注释(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;
}
上面的注释还将创建一个名为“USERDESCRIPTIONS\u ID\u OWN”的额外列,并为新字段设置外键。但我想为“UserDescription”表中现有的“UserId”列创建外键

我按照下面的URL进行映射。


我该怎么做

你的意思是“userId”实际上应该是一个“User”对象(并且是一个具有复合标识的1-N bidir),毕竟这应该是面向对象的。这个系统是几年前开发的。我无法控制很多事情。我试图在对现有系统影响最小的情况下充分利用ORM功能。但是手动定义外键等等。。应该是可能的。。我的问题是怎么做。。
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