如何转换略有不同的表?

时间:2010-05-24 19:20:33

标签: java hibernate orm

有没有办法使用相同的实体类将表条目从旧表转换为新表?

要具体说明,这是我的实体类'新表的注释:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "benutzer_id")
private Integer benutzerId;
@Basic(optional = false)
@Column(name = "benutzer_name")
private String benutzerName;
@Column(name = "benutzer_vorname")
private String benutzerVorname;
@Column(name = "benutzer_nachname")
private String benutzerNachname;
@JoinColumn(name = "gruppe_id", referencedColumnName = "gruppe_id")
@ManyToOne(optional = false)
private Gruppe gruppe;
@OneToMany(mappedBy = "benutzer")
private Collection<Bestellung> bestellungen;

旧表中缺少“benutzer_vorname”和“benutzer_nachname”列,因此如果Hibernate尝试映射表条目,则会崩溃。

我是否必须创建新的实体类,或者是否可以使用现有的实体转换数据?

2 个答案:

答案 0 :(得分:1)

  

我是否必须创建新的实体类,或者是否可以使用现有的实体转换数据?

你不能在两个表上映射一个实体(我这里不是在谈论JOIN继承策略)所以你必须创建一个新的实体。

答案 1 :(得分:1)

如果您正在考虑如何从一个表结构迁移到另一个表结构,那么Hibernate可能不是最佳解决方案。

如果表是平的(没有关联),那么使用SQL复制条目可能非常简单。您可以只选择所需的数据并将其直接插入到新表中(语法可能因DBMS而异,这可能是您的问题)。

在标准SQL中,您可以按照以下方式执行此操作

INSERT INTO new_table (
    column1, 
    column2, 
    column3
)
SELECT
    column1 as "Copied value for new entity",
    'a default' as "Default value for new entity",
    some_column * 3 as "Computed Value for new entity"
FROM 
    new_table;

选择列别名当然是可选的,我只是将它们用作你可以做的各种事情的评论。

当然,如果你有一个更复杂的表结构,你想要展平,你可以执行任何复杂性的查询,只要它返回你想要插入的一组行。