【问题标题】:Error getting @reference entity with Morphia使用 Morphia 获取 @reference 实体时出错
【发布时间】:2016-09-26 21:16:56
【问题描述】:

我有 Exec 实体:

@Entity("Exec")
public class Exec {
  @Id
  private ObjectId id;
  private long initDate;
  private long endDate;
  public enum statuses {
    SUCCESS, FAIL, PARTIAL
  }
  private statuses status;
  @Reference(idOnly = true, ignoreMissing = true, lazy = false)
  Analysis analysis;
  @Reference(idOnly = true, ignoreMissing = true, lazy = true)
  Set<Conclusion> conclusions = new HashSet<Conclusion>();
  // getters and setters

其中引用了结论实体:

@Entity("Conclusion")
public class Conclusion {
  @Id
  private ObjectId id;
  private Map<String, Object> params = new HashMap<String, Object>();
  private long initDate;
  private long endDate;
  public enum statuses {
    SUCCESS, 
    FAILURE
  }
  private statuses status; 
  private String errorMessage;
  private String stackTrace;
  Set<Map<String, Object>> data = new HashSet<Map<String, Object>>();

在调试器中,如果我尝试得出结论

Set<Conclusions> conclusions = mongoWrapper.getDataStore().createQuery(Exec.class).asList().get(0).getConclusions()

我收到以下消息:

com.sun.jdi.InvocationException occurred invoking method.

如果我尝试访问该对象,例如,执行以下操作:

conclusions.toArray()

它抛出一个 RuntimeException,检查堆栈跟踪:

org.mongodb.morphia.mapping.MappingException: Embedded element isn't a DBObject! How can it be that is a class java.lang.String

我尝试更改一堆东西,但没有任何效果。有什么想法吗?

【问题讨论】:

    标签: java mongodb morphia


    【解决方案1】:

    在一组Conclusion中使用具体的AnalysisConclusion。 记住注解不是继承的,然后用@Entity标记AnalysisConclusion

    【讨论】:

    • 我的错误,为了便于阅读,我将类的名称从 AnalysisConclusion 简化为结论(和其他类),我已经更正了 sn-p。不涉及其他类,只涉及 Exec 和结论。
    • 记录@Entity 标记为@Inherited
    • 您能否将保存的数据示例粘贴到这些对象中?我将尝试在本地重新创建该错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多