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

问题是:需要在数据库mysql中建多张结构完全相同,表名不同的表(A B),表结构为id(自增),name,....
笨办法是给A B表分别写个类,差别只在注解上:

@Table(name = "A/B")

但是不想维护属性相同的两个类,考虑过使用JPA的继承注解.

@Inheritance(Strategy=InheritanceType.TABLE_PER_CLASS)

但使用这个注解后主键值不能采用数据库自动生成.

各位大神,有什么好的解决方案嘛?求指教。

阅读 11.4k
2 个回答

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注解的使用说明

新手上路,请多包涵

JdbcTemplete 原生写法,增删改查时 表名传进去。自己封装一下,用起来也不错

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题