0

在已经存在的表结构继承中,我添加了一个新的列类型(我删掉了一些代码)

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Account {
    ......        

    @Column                            // already existed column 
    private String name;               // get/set also applied

    @Column(length=20)                 // new added column 
    @Enumerated(EnumType.STRING)       // get/set also applied 
    private AccountType type; 

    ..........
}

@Entity
public User extends Account {
    ................                   // some other already existed fields
}

在我的 persistence.xml 文件中,我正在使用下一个策略策略来生成 DDL

property name="eclipselink.ddl-generation" value="drop-and-create-tables"

当 DDL 生成正在处理Account表中新添加的列类型时,成功创建了,但是对于User表,根本没有这种列(策略是 TABLE_PER_CLASS)。当我删除数据库并再次创建它时,我修复了这个问题。之后,应用了当前一代的 DLL -用户中的类型也被添加为一列。有人“遇到”这种问题吗?我修复了数据库的删除和创建,但我不确定这应该是未来相同情况下的策略,特别是对于生产数据库

谢谢,西蒙·安杰洛夫

4

1 回答 1

3

DDL 生成是用于开发而不是生产。您看到的问题是因为当表已经存在时,无法使用新字段创建它。如果您按照此处http://wiki.eclipse.org/EclipseLink/DesignDocs/368365的描述添加到表中,则删除并创建或“创建或扩展表”功能将起作用

于 2013-01-29T14:00:03.570 回答