【问题标题】:Define JPA Entity Graph in a separate file在单独的文件中定义 JPA 实体图
【发布时间】:2023-03-23 03:41:02
【问题描述】:

是否可以在与实体定义不同的文件中为 JPA 实体(@NamedEntityGraph 注释)定义实体图?

如果我的项目变得有点复杂,我在这些定义的实体之前会有一大块丑陋/不可读的代码..

【问题讨论】:

  • 显然您可以通过 API 以编程方式定义实体图,该实体图符合“单独文件”的条件
  • 有没有办法使用注解语法将其移到另一个文件中?
  • JPA 规范只要求扫描可持久类以查找注释。
  • 也可以在XML映射文件中定义实体图
  • @wypieprz 你能给我一个例子或参考吗?

标签: java jpa annotations entity spring-data-jpa


【解决方案1】:

假设您有一个使用@NamedEntityGraph 注释的实体,如下所示:

@Entity
@NamedEntityGraph(name = "Project.graph"
  attributeNodes = {
    @NamedAttributeNode(value = "deadline"),
    @NamedAttributeNode(value = "employees", subgraph = "Employee.subgraph")},
    ...
  subgraphs = {
    @NamedSubgraph(name = "Employee.subgraph",
      attributeNodes = {
        @NamedAttributeNode(value = "salary")}
        ...
  )}
)
public class Project {
    ...
    @Temporal(TemporalType.DATE)
    private Date deadline;

    @OneToMany(mappedBy="project", cascade = CascadeType.PERSIST)
    private Collection<Employee> employees;
    ...
}

在 persistence.xml 中添加对 XML 映射文件的引用(比如 orm.xml):

...
<mapping-file>META-INF\orm.xml</mapping-file>
...

关于上述@NamedEntityGraph 可以定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd"
    version="2.1">
    ...
    <entity class="com.example.Project">
        <named-entity-graph>
            <named-attribute-node name="deadline" />
            <named-attribute-node name="projects" subgraph="Employee.subgraph" />
            ...
            <subgraph name="Employee.subgraph">
                <named-attribute-node name="salary" />
                ...
            </subgraph>
        </named-entity-graph>
    </entity>
</entity-mappings>

【讨论】:

    猜你喜欢
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2018-07-23
    • 1970-01-01
    • 2011-04-16
    • 2012-08-16
    相关资源
    最近更新 更多