生成创建脚本时忽略某些实体

时间:2013-05-08 10:05:30

标签: java sql hibernate hibernate-mapping

假设我们有一堆实体类,每个类之间都有映射:

@Entity
@Table(name = "legacy")
public class Legacy {
    // Mappings to a bunch of other different Entities
}

@Entity
@Table(name = "new_entity")
public class NewEntity {

    private Legacy legacy;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "legacy_id", referencedColumnName = "id")
    public Legacy getLegacy() {
        return legacy;
    }

    public Legacy setLegacy(Legacy legacy) {
        this.legacy = legacy;
    }

    // Mappings to other new stuff
}

我们可以在hibernate中使用Configuration类来为一些带注释的类生成创建脚本:

Configuration config = new Configuration();

Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServer2005Dialect");
config.setProperties(properties);

config.addAnnotatedClass(NewEntity.class)

String[] schema = 
        config.generateSchemaCreationScript(new SQLServer2005Dialect());
for (String table : schema) {
    System.out.println(table);
}

然而,这会失败,因为类Legacy尚未添加到配置中。但是,如果我这样做,我需要添加一堆其他遗留类(它们都已经具有“工作”映射和表格。

有没有办法只为NewEntity生成脚本而无需添加Legacy的所有映射?现在我通过注释Legacy映射生成NewEntity的脚本,然后手动添加它们。

1 个答案:

答案 0 :(得分:1)

如果您的NewEntity引用并与其映射关系中的Legacy对象进行交互,则需要对其进行映射。

如果尚未映射hibernate操作,它们如何工作?

如果您想要现有架构的更新脚本而不是生成新的创建db脚本,请尝试使用generateSchemaUpdateScript方法。