首页 > jpa 一个类对应多张相同结构的表

jpa 一个类对应多张相同结构的表

问题是:需要在数据库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注解的使用说明

【热门文章】
【热门文章】