gpt4 book ai didi

java - 使用 EJB3/Hibernate 时,Apache Derby 中的表不会自动创建

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:12 25 4
gpt4 key购买 nike

我有一个 EJB3 实体 bean 播放器,其注释如下:

@Entity
@Table(name = "PLAYER")
public class Player {
public Player() {
super();
}

@Id
@GeneratedValue
private String id;

@Column(nullable = false)
private String firstName;

private String lastName;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
}

我正在使用 Apache Derby DB 来保存它。我有一个解释 hibernate 属性的 persistence.xml 文件,我定义了 hibernate.hbm2ddl.auto=create

<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="PlayerApp" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.cricinfo.domain.Player</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver" />
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.connection.url"
value="jdbc:derby://localhost:1527/PlayerAppDB;create=true" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>

但是当我尝试保留这个对象时,我得到一个异常提示

Caused by: org.apache.derby.client.am.SqlException: Table/View 'PLAYER' does not exist.
at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source)

自从我设置了属性 hibernate.hbm2ddl.auto 之后,它不应该自动创建表吗?还是我遗漏了什么?

我的主要方法如下图:

public static void main(String[] args) {

Player p = new Player();
p.setFirstName("A");
p.setLastName("BC");

EntityManagerFactory factory = Persistence.createEntityManagerFactory("PlayerApp");
EntityManager entityMgr = factory.createEntityManager();
EntityTransaction tx = entityMgr.getTransaction();
tx.begin();
entityMgr.persist(p);
tx.commit();
entityMgr.close();
factory.close();
}

最佳答案

添加以下属性

<property name="hibernate.generateDdl" value="true" />

关于java - 使用 EJB3/Hibernate 时,Apache Derby 中的表不会自动创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6579180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com