【问题标题】:Problems building up Java project with JPA使用 JPA 构建 Java 项目的问题
【发布时间】:2014-02-25 03:39:22
【问题描述】:

我试图让 javax.persistence 运行,但我得到了错误。 我搭建了一个小项目进行测试,创建实体类,persistence.xml,运行过程:

实体类:

package glasses;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Hund implements Serializable {
    @Id
    private long id;
    private String name;
    private String typ;

    public long getId() {
        return this.id;
    }

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

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTyp() {
        return this.typ;
    }

    public void setTyp(String typ) {
        this.typ = typ;
    }
}

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="GlassesPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/glasses?zeroDateTimeBehavior=convertToNull"/>
      <property name="javax.persistence.jdbc.password" value="mypwd"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    </properties>
  </persistence-unit>
</persistence>

错误信息:

Caused by: java.lang.IllegalArgumentException: Object: glasses.Hund@5d2e0422 is not a known entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
at glasses.FXMLDocumentController.handleButtonAction(FXMLDocumentController.java:48)
... 54 more

有人知道这个问题吗? Hund级有什么问题吗?还是在persistence.xml中?

【问题讨论】:

  • 你能显示完整的异常吗?
  • 嘿@Mehdi,我只是想在这里给你错误信息,但stackoverflow 不会接受6000 个字符。 Sabuj Hassan 下面的答案对我的问题给出了有效的答案。即使现在我的项目有效,但结果并不令人满意。你知道如何更好地解决它吗?

标签: java database jpa entity persistence.xml


【解决方案1】:

如果您不想在 persistence.xml 中列出所有实体,可以在 persistence.xml 中添加以下行:

<exclude-unlisted-classes>false</exclude-unlisted-classes>

【讨论】:

    【解决方案2】:

    persistence.xml 中使用 Hund 类,如下例所示。只需将其放在属性和持久性单元标记之间即可。

    </properties>
      <class>glasses.Hund</class>
    </persistence-unit>
    

    【讨论】:

    • 好的,我这样做了,现在我的例子可以工作了。但是我总是必须将所有类集成到persistence.xml 中吗?我认为只需将@Entity-Annotation 放在我想要作为数据库中的表的类上方即可完成所有工作。假设我现在构建了一个包含 200 个类的结构,我是否必须使用 glasses.myclass 将它们全部放入 persistence.xml 中?
    • 如果您单独创建类,那么您必须手动进行。但是,如果您使用带有create entities from tables 选项的IDE 执行此操作,那么IDE 将为您更新persistence.xml 文件。
    • 好吧,它可以工作。感谢您的帮助,Sabuj!
    • @SabujHassan 您可以将persistence.xml 放入另一个标签:&lt;exclude-unlisted-classes&gt;false&lt;/exclude-unlisted-classes&gt;,以便持久性提供程序扫描所有包以查找您的注释类。否则,它会期望您提供您希望它考虑的类的列表。您必须考虑在初始化持久性单元时扫描类路径中的所有类可能会花费一些延迟。
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多