【问题标题】:Spring JPA Annotations & ORM.xml alternative?Spring JPA 注释和 ORM.xml 替代方案?
【发布时间】:2023-03-12 23:41:01
【问题描述】:

我想以一种可以尽可能简单地更改框架的方式来设计我的微服务。所以我有一个接口来处理未来可能改变的一切,但我不能为实体做那个,因为我不知道在不使用 @Entity / @Id.. 或声明的情况下使用 JPA + Hibernate 的方法ORM.xml 文件。 有没有办法定义处理实体的配置类?

随机示例:

@Entity 
@IdClass(DemoId.class)
@Table(name = "demo",catalog="demodb")
public class Demo implements Serializable{
    @Id
    private long pk1;
    @Id
    private long pk2;
    @Id
    private long pk3;    
    @Lob
    String description; 

    @ElementCollection(targetClass=String.class)
    List<String> infos = new ArrayList<>(); 
}

public class DemoId implements Serializable{   
    private long pk1;
    private long pk2;
    private long pk3;    
}

如何将我的实体(在本例中为 Demo)和 JPA 注释分为两个类?因此,如果有什么东西使 JPA 被弃用,我可以轻松切换(只需更改 1 适配器或类似的东西)

Ty 进阶

【问题讨论】:

  • JPA 提供者需要注释或 orm.xml 或两者。这就是所有要说的。

标签: java spring hibernate jpa architecture


【解决方案1】:

根据我对 JPA 的理解和经验,在这个问题上不可能两全其美。 JPA 直接依赖于文件内的注释。在我看来,最好的选择是为每个文件创建两个单独的 .java 文件。这不是一个很好的解决方案,但我认为您不会得到更好的结果。

例如: 文件 #1 DemoAnnotated.java

@Entity 
@IdClass(DemoId.class)
@Table(name = "demo",catalog="demodb")
public class Demo implements Serializable{
    @Id
    private long pk1;
    @Id
    private long pk2;
    @Id
    private long pk3;    
    @Lob
    String description; 

    @ElementCollection(targetClass=String.class)
    List<String> infos = new ArrayList<>(); 
}

文件 #2 Demo.java

public class Demo implements Serializable{
    private long pk1;
    private long pk2;
    private long pk3;    
    String description; 
    List<String> infos = new ArrayList<>(); 
}

从长远来看,您可能会节省时间来暂时保留注释。如果您稍后需要快速切换框架 - 这将需要重构,但您应该能够相当快地做到这一点。我无法想象变化太激烈。可能只是 @Entity -> @SomeOtherName 在这种情况下您可以进行搜索和替换。搜索和替换可能是您的救星。

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 2016-06-21
    • 1970-01-01
    • 2015-11-10
    • 2017-12-31
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多