我一直在尝试在 DataNucleus JDO 中进行简单的一对多对象绑定。它只是两个类(我剥离了一个简单的字段):
@PersistenceCapable(table="ORDER",schema="mgr")
public class Order {
@PrimaryKey(column="id")
@Persistent(valueStrategy=IdGeneratorStrategy.NATIVE,column="id")
private Long id;
@Persistent(defaultFetchGroup="false",column="customer_id")
@Element(column="customer_id")
private Customer customer;
}
还有一个类 Customer 有一个订单列表
@PersistenceCapable(table="customer",schema="mgr",identityType=IdentityType.DATASTORE)
@DatastoreIdentity(strategy=IdGeneratorStrategy.NATIVE)
public class Customer {
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.NATIVE,column="id")
private Long id;
@Persistent(mappedBy="customer")
private List<Order> orders;
}
数据库表设置非常简单(客户表和订单表,外键(customer_id)引用客户)。然而,当我尝试为客户插入一些订单时,我收到一个错误
ORDER
javax.jdo.JDODataStoreException:使用语句“INSERT INTO (USER_COMMENT
,ORDER_DATE
,STATUS
,CUSTOMER_ID
, ) VALUES (?,?,?,?,?)”插入对象“test.Order@17dd585”ORDERS_INTEGER_IDX
失败:“字段”中的未知列“ORDERS_INTEGER_IDX”列表'
DataNucleus 以某种方式假设,有一个列 ORDERS_INTEGER_IDX (数据库中不存在这样的列)。我想到的唯一想法是http://www.datanucleus.org/products/datanucleus/jdo/metadata_xml.html
在某些情况下,DataNucleus 会将一个特殊的数据存储列添加到连接表中,以便集合可以允许存储重复元素。此扩展允许使用列名的规范。这应该在关系的集合端的字段中指定。JDO2 不允许这样一个规范的标准位置,扩展标签也是如此。
非常酷!'在某些情况下'。我不知道如何让我的情况不成为“某些情况”的一个子集,但我不知道如何让它发挥作用。也许有人已经遇到过“INTEGER_IDX”问题?或者(也很有可能)-我没有正确绑定数据:/