加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用EJB3 / Hibernate时未在Apache Derby中自动创建的表

发布时间:2020-12-15 02:26:40 所属栏目:Java 来源:网络整理
导读:我有一个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; publ
我有一个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来坚持这一点.我有一个persistence.xml文件,它解释了hibernate属性,我定义了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" />

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读