如何将对象实例存储为EJB3实体的字段?

时间:2009-02-10 22:59:43

标签: java orm jpa

我有一个实体Promotion,它有3个简单的字段(id,name,description),所有3个都将映射到DB。到现在为止还挺好。问题在于第4个字段ruleModel,它是RuleModel的一个实例,在运行时构造时,它将包含十几个其他类的对象实例。我不想将RuleModel映射到数据库表,因为这是一项额外的工作,也是不必要的。我只想将ruleModel对象实例存储到DB中,然后能够从DB加载ruleModel并在内存中恢复对象实例。

代码:

@Entity  
public class Promotion {  
    @Id  
    @GeneratedValue  
    private Long id;  

    private String name;  
    private String description;  

    private RuleModel ruleModel;  

}

2 个答案:

答案 0 :(得分:0)

如果使Rule Model类实现Serializeable接口,那么您应该能够将一个RuleModel变量添加到Promotion类。 这将需要在Promotion表中添加新列。 当您持久化Promotion类时,RuleModel类实例的seraralized实例将存储在新列中。

答案 1 :(得分:0)

如果我理解正确,您正在尝试序列化 RuleModel 实例 - 其中包含对许多其他实例的引用 - 当您反序列化它时,您将接受所有引用 ruleModel之前举行的会丢失。如果这是您的目标,您需要做两件事:

  1. 使用
  2. 瞬态标记 RuleModel 中的任何字段
  3. 使用JPA @Embeddable 注释
  4. 注释 RuleModel
  5. 使用 @Embedded
  6. 促销中添加 ruleModel 字段

    虽然这不会将 ruleModel 实例持久保存到单个列中,但它会将实例持久保存到 Promotion 使用的同一个表的多个列中。它还可以根据需要重新实现 ruleModel