我正在尝试使用内存中的HSQL DB运行一些Hibernate / JPA示例。我收到的错误消息如下:
13:54:21,427 ERROR SchemaExport:425 - HHH000389: Unsuccessful: alter table ReferringItem_map drop constraint FK5D4A98E0361647B8 13:54:21,427 ERROR SchemaExport:426 - user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MAP 13:54:21,427 ERROR SchemaExport:425 - HHH000389: Unsuccessful: alter table ReferringItem_myCollection drop constraint FK75BA3266361647B8 13:54:21,427 ERROR SchemaExport:426 - user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MYCOLLECTION 13:54:21,428 ERROR SchemaExport:425 - HHH000389: Unsuccessful: alter table ReferringItem_myList drop constraint FK6D37AA66361647B8 13:54:21,428 ERROR SchemaExport:426 - user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MYLIST 13:54:21,428 ERROR SchemaExport:425 - HHH000389: Unsuccessful: alter table ReferringItem_mySet drop constraint FK3512699A361647B8 13:54:21,429 ERROR SchemaExport:426 - user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MYSET
对应的类是:
@Entity public class ReferringItem implements Serializable { @Id private long id; @ElementCollection private Collection<AnEmbeddable> myCollection = new ArrayList<AnEmbeddable>(); @ElementCollection(fetch=FetchType.EAGER) private Set<Long> mySet = new HashSet<Long>(); @ElementCollection(targetClass=String.class) private List myList = new ArrayList(); @ElementCollection private Map<String,AnEmbeddable> map = new HashMap<String,AnEmbeddable>(); public ReferringItem() { } // Setters & Getters }
可嵌入的是:
@Embeddable public class AnEmbeddable implements Serializable { private String s; public AnEmbeddable() { } public String getS() { return s; } public void setS(String s) { this.s = s; } }
我的persistence.xml:
persistence.xml
<persistence 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" version="2.0"> <persistence-unit name="JPA" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.jverstry.jpa.AuthorizedTypes.AuthorizedTypes</class> <class>com.jverstry.jpa.AuthorizedTypes.OtherEntity</class> <class>com.jverstry.jpa.AuthorizedTypes.SomeEmbeddable</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:testdb"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit> </persistence>
我在hibernate4.1.5.Final和hibernate状态HSQLDB 2.2.8。
4.1.5.Final
HSQLDB 2.2.8
有谁知道导致此问题的原因以及如何解决?
您可以忽略这些错误。create- drop空数据库的组合(对于内存中的情况总是如此)会为它尝试删除的每个数据库对象生成这些。原因是没有要删除的任何数据库对象-针对空数据库执行DROP语句。
create- drop
同样,对于普通的永久数据库,也会出现这样的错误,因为Hibernate在执行DROP语句之前并不会确定数据库中是否存在添加的对象或者它是新对象。