Spring JPA Annotations和ORM.xml替代品?

时间:2018-10-05 17:49:04

标签: java spring hibernate jpa architecture

我想以一种我可以尽可能轻松地更改Framework的方式设计微服务。因此,我为将来可能发生的所有变化提供了接口,但是对于实体,我无法做到这一点,因为我不知道在不使用@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进阶

1 个答案:

答案 0 :(得分:2)

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

相关问题