【问题标题】:Datanucleus mongodb embedded objectDatanucleus mongodb 嵌入对象
【发布时间】:2015-11-19 08:47:36
【问题描述】:

Datanucleus 是否支持 mongodb 嵌入对象?

我有一个集合“组”,其中一个字段代表嵌入对象:

@PersistenceCapable(table = "group")
public class MyGroup
{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY, column = "_id")
    private String id;
    private String name;
    @Embedded
    private Person person;

    // getters/setters
    ...
}

@EmbeddedOnly
@PersistenceCapable
public class Person
{
    private String _id;
    private String firstName;
    private String lastName;

    // getters/setters
    ...
}

按 ID 检索记录(并与 Jackson 编组为 JSON)

MyGroup myGroup = persistenceManager.getObjectById(MyGroup.class, id)

配置:

@Bean
public PersistenceManager persistenceManager() throws IOException
{
    Properties jdoProperties = getProperties();

    PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(jdoProperties);
    return pmf.getPersistenceManager();
}

我得到的结果是:

{
  "id": "523119baac8c950b674d9245",
  "name": "GXVTXCCXB",
  "person": {
    "_id": null,
    "firstName": null,
    "lastName": null
  }
}

嵌入的对象不是由它的值填充的。

【问题讨论】:

  • 基于什么持久化代码?基于什么检索代码?日志是怎么说的?
  • @NeilStockton 请查看更新信息。
  • 还有持久化代码,还有日志?
  • 我没有持久化代码。我只是想获取对象。
  • 所以你的意思是你已经在数据库中有对象,由其他一些机制持久化?所以也许你没有在你的 JDO 映射信息中正确映射嵌入的列

标签: mongodb orm datanucleus


【解决方案1】:

如果您的现有数据不是由您的 JDO 提供程序生成的,那么您必须确保您的映射与数据库中的内容相匹配。在这种情况下,您似乎希望嵌入字段的“列”为“firstName”和“lastName”,但您的类未配置为使用这些名称嵌入它们。将您的注释更新为

@Embedded(members={
            @Persistent(name="firstName", columns=@Column(name="firstName")),
            @Persistent(name="lastName", columns=@Column(name="lastName"))})
private Person person;

JDO docs for embedded fields

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2022-01-22
    • 2018-02-09
    相关资源
    最近更新 更多