2014-12-11 10 views
3

Я использую Netbeans IDE 8.0.2 и eclipselink 2.5.2. Это возникающее исключение ниже при открытии соединения, проблема в том, что это не происходит каждый раз. Сущность, описанная в исключении «Департамент», точно следует шаблону других классов, поскольку наша система уже содержит приблизительно 500 классов сущностей, и только в новых классах происходит это исключение. Этот объект был создан с помощью этой опции "Классы сущностей из базы данных" из Netbeans и добавил к persistense XML ...EclipseLink - не Entity как целевой объект в атрибуте отношения

Вызванный: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Затмения 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] использует не-сущность [класс entidade.Departamento] как объект-мишень в атрибуте отношения [field departmentamento].

Entity 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 Item

@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> 

I В том же состоянии persistence.xml имеется еще три единицы устойчивости.

ответ

7

Обычно я вижу эту ошибку, когда забываю добавить класс в мой persistence.xml, который пытается использовать другой объект. Убедитесь, что имя элемента сохранения, которое вы передаете, чтобы создать EntityManagerFactory, является тем, которое вы хотите (totemPU). Кажется, что это может быть использование единицы сохранения, которая включает entidade.item, но не entidade.Departamento.

+0

Да, я слышал, и я уже проверил это. Ошибка в этой строке «emf = (EntityManagerFactoryImpl) Persistence.createEntityManagerFactory (« totemPU »); '' –

+0

Другое дело в структуре проектов ... У меня есть один проект для объектов, который создает .jar, этот .jar Я добавляю к другому проекту, где происходит ошибка. –

+0

Я не уверен, что это проблема. Я добавил классы из другого проекта, который я включил в свой проект, и он отлично работает. Вы можете попытаться переместить объекты в том же проекте, с которым вы пытаетесь получить доступ к объектам, и посмотреть, работает ли он. Удачи! – dalia