Java 有没有一种没有注释的有效方法来分发bean?
我有一些用JPA注释的bean来处理持久性映射 以下是一个例子:Java 有没有一种没有注释的有效方法来分发bean?,java,jpa,annotations,code-reuse,reusability,Java,Jpa,Annotations,Code Reuse,Reusability,我有一些用JPA注释的bean来处理持久性映射 以下是一个例子: import javax.persistence.Id; public class User{ @Id private String id; public String getId(){ return id; } public void setId(String id){ this.id = id; } } 现在我想在另一个项目中使用这个类,在这个项目中,我不
import javax.persistence.Id;
public class User{
@Id
private String id;
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
}
现在我想在另一个项目中使用这个类,在这个项目中,我不需要依赖javax.persistence,所以我不希望只为这样的类包含它
所以我想把这个bean分成两个类:一个只有字段和访问器,一个在访问器上有JPA注释的子类。比如:
public class User{
private String id;
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
}
及
不幸的是,在大多数情况下,在访问器上放置JPA注释是一种不鼓励的做法,我支持这种做法
您能推荐更干净的解决方案吗?如果您必须使用基于注释的JPA映射,那么这可能没有帮助,但是如果您愿意使用它,您可以使用xml配置映射,而不将xml映射文件包含在与其他项目共享用户类的jar中 请参见此处的示例:
如果您坚持使用注释来定义实体映射,那么您的实体类就无法避免依赖JPA。如果必须呈现表示相同数据的非JPA依赖类,并且希望能够以多态方式处理不同的表示,那么您的选项是有限的:
- 注释类可以扩展非注释类,或者
- 注释类和非注释类可以扩展公共超类,或者
- 注释类和非注释类可以实现公共接口
如果您想朝这个方向发展,那么我建议您使用接口而不是类继承,无论您是注释成员变量还是访问器方法。使用多态性接口可以更好地模拟您所描述的现实(一些
用户是实体,而另一些不是实体),它不会干扰您可能需要的任何继承层次结构,如果您注释成员变量,那么它就避免了重复存储。这是基于XML的实体映射的一个很好的用例。
import javax.persistence.Id;
public class UserEntity extends User{
@Override
@Id
public String getId(){
return super.getId();
}
}