问题是:需要在数据库mysql中建多张结构完全相同,表名不同的表(A B),表结构为id(自增),name,....
笨办法是给A B表分别写个类,差别只在注解上:
@Table(name = "A/B")
但是不想维护属性相同的两个类,考虑过使用JPA的继承注解.
@Inheritance(Strategy=InheritanceType.TABLE_PER_CLASS)
但使用这个注解后主键值不能采用数据库自动生成.
各位大神,有什么好的解决方案嘛?求指教。
JPA中同一实体不能映射到多张表,如果表字段相同可以提出到公共类中。
1. 定义公共类实体
使用@MappedSuperclass注解声明父类,该类不会映射到数据库表,但它的属性都将映射到其子类的数据库表中。
@MappedSuperclass
public abstract class AbstractBase {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 公共属性
// getter and setter
}
2. 定义实体A
@Entity
@Table(name = "TABLE_A")
public class A extends AbstractBase {
}
3. 定义实体B
@Entity
@Table(name = "TABLE_B")
public class B extends AbstractBase {
}
以上即可通过公共类来维护实体和表字段的映射关系。
@MappedSuperclass注解的更多说明请查看:JPA @MappedSuperclass注解的使用说明