【问题标题】:EclipseLink “drop-and-create-tables” no added column in inherited class, declired in super class with InheritanceType.TABLE_PER_CLASSEclipseLink “drop-and-create-tables” 在继承类中没有添加列,在具有 InheritanceType.TABLE_PER_CLASS 的超类中声明
【发布时间】:2013-01-29 12:01:03
【问题描述】:

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

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

谢谢, 西蒙·安杰洛夫

【问题讨论】:

    标签: jpa eclipselink


    【解决方案1】:

    DDL 生成用于开发而非生产。您看到的问题是因为当表已经存在时,无法使用新字段创建它。如果您按照此处http://wiki.eclipse.org/EclipseLink/DesignDocs/368365

    中的说明添加到表中,则删除并创建或“创建或扩展表”功能将起作用

    【讨论】:

    • 嗨,克里斯,我看到我唯一应该做的就是将 persistence.xml 文件更改为 我的fie 是同一个期望的DDL 生成策略。它是 drop 和 create/ 在这种情况下,该字段也没有添加到扩展类中。你发给我的消息来源我是否正确理解我只需要对持久性/.xml 文件做那件事?
    • 是的,然后重新部署应用程序或调用 emf.refreshMetadata() 以使其重新加载,如本文所述stackoverflow.com/questions/13372213/… 您还可以启用 EclipseLink 日志记录以查看可能出现的问题如此处所述wiki.eclipse.org/EclipseLink/Examples/JPA/Logging
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 2014-06-17
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多