Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 春季少年警讯;ORM.xml替代方案?_Java_Spring_Hibernate_Jpa_Architecture - Fatal编程技术网

Java 春季少年警讯;ORM.xml替代方案?

Java 春季少年警讯;ORM.xml替代方案?,java,spring,hibernate,jpa,architecture,Java,Spring,Hibernate,Jpa,Architecture,我想以一种可以尽可能轻松地改变框架的方式来设计我的微服务。因此,我有一个接口,可以处理将来可能发生的所有变化,但我不能为实体这样做,因为我不知道有没有一种方法可以在不使用@Entity/@Id的情况下使用JPA+Hibernate。。或者声明一个ORM.xml文件。 是否有一种方法可以定义处理实体的配置类 随机示例: @Entity @IdClass(DemoId.class) @Table(name = "demo",catalog="demodb") public class Demo i

我想以一种可以尽可能轻松地改变框架的方式来设计我的微服务。因此,我有一个接口,可以处理将来可能发生的所有变化,但我不能为实体这样做,因为我不知道有没有一种方法可以在不使用
@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;    
}
@实体
@IdClass(DemoId.class)
@表(name=“demo”,catalog=“demodab”)
公共类演示实现了可序列化{
@身份证
私人长pk1;
@身份证
私人长pk2;
@身份证
私人长pk3;
@高球
字符串描述;
@ElementCollection(targetClass=String.class)
List infos=new ArrayList();
}
公共类DemoId实现可序列化的{
私人长pk1;
私人长pk2;
私人长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<>(); 
}
@实体
@IdClass(DemoId.class)
@表(name=“demo”,catalog=“demodab”)
公共类演示实现了可序列化{
@身份证
私人长pk1;
@身份证
私人长pk2;
@身份证
私人长pk3;
@高球
字符串描述;
@ElementCollection(targetClass=String.class)
List 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<>(); 
}
公共类演示实现了可序列化{
私人长pk1;
私人长pk2;
私人长pk3;
字符串描述;
List infos=new ArrayList();
}

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

JPA提供商需要注释或orm.xml或两者兼而有之。这就是我要说的。