如何使用数据库中的动态表映射实体?

时间:2018-06-19 06:05:28

标签: hibernate spring-boot jpa spring-data-jpa

我的数据库st_tickets_1,st_tickets_2,st_tickets_3等中有类似的表,可以根据需要生成。我想将这些表映射到单个实体。但是我无法映射,因为我必须将静态表名放在实体@Table(“st_tickets_1”)上。

截至目前我正在使用Spring JDBC模板。

1 个答案:

答案 0 :(得分:1)

您可能会发现有用的休眠继承功能:

https://marcin-chwedczuk.github.io/mapping-inheritance-in-hibernate

因此可以创建包含id和公共字段的抽象实体:

@MappedSuperclass
public abstract class Ticket {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    ...

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

不同表的实现:

@Entity
@Table(name = "st_ticket1")
public class Ticket1 extends Ticket {
}

@Entity
@Table(name = "st_ticket2")
public class Ticket2 extends Ticket {
}

比从数据库读取实现实例并将它们转换为Ticket抽象以将其用于业务逻辑。