【问题标题】:EclipseLink - non Entity as target entity in the relationship attributeEclipseLink - 非实体作为关系属性中的目标实体
【发布时间】:2015-02-09 22:41:12
【问题描述】:

我正在使用 Netbeans IDE 8.0.2 和 eclipselink 2.5.2。 打开连接时出现以下异常,问题是并非每次都发生这种情况。 异常“Departmento”中描述的实体完全遵循其他类的模式,即我们的系统已经包含大约 500 个实体类,并且仅在新类中发生此异常。 该实体由 Netbeans 的“数据库中的实体类”选项生成并添加到持久化 XML ...

原因:javax.persistence.PersistenceException: 异常 [EclipseLink-28018] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException 异常描述:PersistenceUnit [totemPU] 的预部署失败。 内部异常:异常 [EclipseLink-7250] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException 异常描述:[class entidade.Item] 使用非实体 [class entidade.Departamento] 作为关系属性 [field departamento] 中的目标实体。

实体部门

@Entity
@Table(name = "departamento")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Departamento.findAll", query = "SELECT d FROM Departamento d"),
@NamedQuery(name = "Departamento.findById", query = "SELECT d FROM Departamento d WHERE   d.departamentoPK.id = :id"),
@NamedQuery(name = "Departamento.findByIdEmpresa", query = "SELECT d FROM Departamento d WHERE d.departamentoPK.idEmpresa = :idEmpresa"),
@NamedQuery(name = "Departamento.findByDescricao", query = "SELECT d FROM Departamento d WHERE d.descricao = :descricao"),
@NamedQuery(name = "Departamento.findByLixo", query = "SELECT d FROM Departamento d WHERE d.lixo = :lixo"),
@NamedQuery(name = "Departamento.findByIp", query = "SELECT d FROM Departamento d WHERE d.ip = :ip")})
public class Departamento implements Serializable {

private static final long serialVersionUID = 1L;
@EmbeddedId
protected DepartamentoPK departamentoPK;
@Basic(optional = false)
@Column(name = "descricao")
private String descricao;
...
Getters() and Setters()

实体项目

@Entity
@Table(name = "item")
public class Item implements Serializable {

@EmbeddedId
protected ItemPK itemPK;
@JoinColumns({
    @JoinColumn(name = "departamento_id", referencedColumnName = "id"),
    @JoinColumn(name = "departamento_id_empresa", referencedColumnName = "id_empresa")})
@ManyToOne(optional = true)
private Departamento departamento;
...
Getters() and Setters()

Persistence.xml

<persistence-unit name="totemPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entidade.Departamento</class>
<class>entidade.item</class>
... More classes ...
<properties>
  <property name="javax.persistence.jdbc.url" value="jdbc:mysql://xxx"/>
  <property name="javax.persistence.jdbc.password" value="xxx"/>
  <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
  <property name="javax.persistence.jdbc.user" value="xxx"/>
  <property name="javax.persistence.jdbc.autoReconnect" value="true"/>
  <property name="eclipselink.logging.session" value="false"/>
  <property name="eclipselink.logging.level" value="OFF"/>
  <property name="eclipselink.weaving" value="static"/>
  <property name="eclipselink.query-results-cache" value="false"/>
</properties>

在同一个persistence.xml中多了三个持久化单元。

【问题讨论】:

    标签: jpa netbeans persistence eclipselink jpa-annotations


    【解决方案1】:

    当我忘记在我的 persistence.xml 中添加另一个实体尝试使用的类时,我通常会看到此错误。确保您在创建 EntityManagerFactory 时传入的持久性单元名称是您想要的(totemPU)。似乎它可能使用包含 entidade.item 但不包含 entidade.Departamento 的持久性单元。

    【讨论】:

    • 是的,我听说过并且已经检查过了。错误发生在这一行 ''emf = (EntityManagerFactoryImpl) Persistence.createEntityManagerFactory("totemPU");''
    • 另一件事是项目的结构...我有一个用于制作 .jar 的实体的项目,我将此 .jar 添加到另一个项目中,发生错误。
    • 我不确定这是否是问题所在。我从另一个项目中添加了我的项目中包含的类,它运行良好。您可以尝试在您尝试从中访问实体的同一项目中移动实体并查看它是否有效。祝你好运!
    猜你喜欢
    • 2015-06-07
    • 2017-05-22
    • 1970-01-01
    • 2012-01-11
    • 2015-01-14
    • 2023-03-31
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多