通过JPA重写Derby DB表(带FK)

时间:2012-02-06 17:49:36

标签: jpa eclipselink

我可以在DB中填充2个表,其中表具有映射(一个表具有来自其他的FK)。该 EclipseLink DataSource显示刷新到DB已经完成了。 我正在尝试重写表(第二次使用相同的数据),而persistence.xml有 属性子句如下:   <property name="eclipselink.ddl-generation" value="drop-create-tables" /> 但是我发现在重写之前没有删除(擦除)前面的表,因此会被以下关于重复键的异常消息拒绝:

  

“内部例外:   java.sql.SQLIntegrityConstraintViolationException:语句是   中止,因为它会导致唯一的重复键值   或主键约束或唯一索引   “主机”上定义了“SQL120206135740510”。 “(主页是指向的表格   到FK)。

我在persistence.xml中缺少什么,或者应该在重写之前使表丢失? 下面是persistence.xml文件(DB文件名为'test'。模式是用户名后的名称(在我的情况下是APP)):

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
        <persistence-unit name="jpa_test"> 
                <class>Host</class> 
                <class>Vm</class> 
                <properties> 
                        <property name="javax.persistence.jdbc.url" value="jdbc:derby://im6-64s:1527/test;create=true" /> 
                        <property name="javax.persistence.jdbc.user" value="APP" /> 
                        <property name="javax.persistence.jdbc.password" value="passw0rd" /> 
                        <!-- EclipseLink should create the database schema automatically --> 
                        <property name="eclipselink.ddl-generation" value="drop-create-tables" /> 
                        <property name="eclipselink.ddl-generation.output-mode" value="database" /> 
                </properties> 

        </persistence-unit> 
</persistence> 

2 个答案:

答案 0 :(得分:1)

“drop-create-tables”应该是“drop-and-create-tables”

答案 1 :(得分:0)

尝试添加值为Finest或ALL的“eclipselink.logging.level”属性,以查看可能未执行删除的原因。