我想以一种可以尽可能轻松地更改框架的方式设计我的微服务。所以我有一个接口(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/