java - Spring JPA 注释和 ORM.xml 替代方案?

标签 java spring hibernate jpa architecture

我想以一种可以尽可能轻松地更改框架的方式设计我的微服务。所以我有一个接口(interface),用于将来可能发生的所有变化,但我不能为实体这样做,因为我不知道不使用 @Entity 就可以使用 JPA + Hibernate 的方法。/@Id .. 或声明 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 适配器或类似的东西)

进阶

最佳答案

根据我对 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,在这种情况下你可以进行搜索和替换。搜索和替换可能是您的救星。

关于java - Spring JPA 注释和 ORM.xml 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52670913/

相关文章:

java - 无法使用 Robolectric 的 FakeHttpLayer(调用 getFakeHttpLayer 时出现 NullPointerException)

java - 如何将文件内容视为字符串

java - Glassfish 初始化 Singleton bean 两次

java - 未提交的数据库事务和自增列

java - Gmail API 配置问题(Java 中)

spring - WebSocketMessageBrokerStats-如何设置loggingPeriod

java - 在 Neo4j 的数据成员中保留元素的插入顺序

java - Spring-Webapps : shared resources and separated development/maven modules?

hibernate - 在控制台应用程序中将spring-data-jpa与hibernate一起使用时如何延迟加载

hibernate - Maven Aspectj插件再次调用JPA模型生成器