我使用 xjc 创建一个代表目录的模型类。它被注释为与 jax-b 和 jpa 一起使用。因为它对目录进行建模,所以目录可以包含文档(文件)和其他目录,因此类属性之一是:
@XmlElements({
@XmlElement(name = "dir", type = Dir.class),
@XmlElement(name = "document", type = Document.class)
})
protected List<Object> dirOrDocument = new ArrayList<>();
您可以看到我有一个对象列表,它可以是 Dir 或 Document 类的实例。这对于使用 jax-b 编码到 xml 非常有用,但是如果我想使用 JPA 将其持久保存到数据库中,我将如何告诉 JPA 测试对象是否为 instanceof Dir,写入 Dir 表。如果Object是instanceof Document,写入文档表?
我已经考虑过使用 JPA AttributeConverter,但看起来前景并不乐观,因为它似乎可以从一种类型转换为另一种类型,但我可能需要转换为多种类型。
也许还有另一种方式来表示我的模型,可以更好地用于 JAXB 和 JPA?
我正在使用 eclipselink 来实现 JAXB 和 JPA。
最佳答案
要么将其设为两个独立的关联(subDirectories
和 documents
),要么创建一个包含公共(public)属性的抽象实体(例如 File
)字段(name
、parentDirectory
等),以及两个子类 Directory
和 Document
。然后阅读 Hibernate 手册中有关继承的章节,了解映射继承的各种方式。
关于java - 我可以使用 JPA 将对象类型映射到表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44210781/