我想以一种我可以尽可能轻松地更改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进阶
答案 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,在这种情况下,您可以进行搜索和替换。搜索和替换可能是您的救星。