java - 无法预部署处于无效状态的 PersistenceUnit [PU] [DeployFailed]

标签 java jpa eclipselink vaadin

我使用 EclipseLink 作为我的 JPA 提供程序。我的应用程序工作正常,但最近在部署应用程序时出现错误,并且它不再工作。我是 JPA 新手,尽管我已阅读日志,但我无法理解发生了什么。它与 EclipseLink-93 和 EclipseLink-41 异常相关。有人可以帮助我吗?预先感谢您。

Exception [EclipseLink-93] (Eclipse Persistence Services - 2.6.3.qualifier): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The table [CONTACT] is not present in this descriptor.
Descriptor: RelationalDescriptor(science.softdev.SongPromoter.model.Album --> [DatabaseTable(ALBUM)])

Exception [EclipseLink-41] (Eclipse Persistence Services - 2.6.3.qualifier): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: A non-read-only mapping must be defined for the sequence number field.
Descriptor: RelationalDescriptor(science.softdev.SongPromoter.model.Album --  [DatabaseTable(ALBUM)])

Runtime Exceptions: 
---------------------------------------------------------

at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1656)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:130)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at science.softdev.SongPromoter.Persistance.<clinit>(Persistance.java:16)
... 67 more
Caused by: Exception [EclipseLink-28017] (Eclipse Persistence Services - 2.6.3.qualifier): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Unable to predeploy PersistenceUnit [PU] in invalid state [DeployFailed].
Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.6.3.qualifier): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [PU] failed. Close all factories for this PersistenceUnit.
Internal Exception: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.3.qualifier): org.eclipse.persistence.exceptions.IntegrityException

这是我的相册和联系人类的代码:

package science.softdev.SongPromoter.model;


import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Entity
public class Album {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idAlbum;
private String albumUUID = UUID.randomUUID().toString();
private String name;
private String author;
private boolean active = true;
private String simplifiedDate;
private String zipUUID = UUID.randomUUID().toString();
private String description = "";

public int getIdAlbum() {
    return idAlbum;
}

public void setIdAlbum(int idAlbum) {
    this.idAlbum = idAlbum;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getZipUUID() {
    return zipUUID;
}

public void setZipUUID(String zipUUID) {
    this.zipUUID = zipUUID;
}

public String getSimplifiedDate() {
    return simplifiedDate;
}

public void setSimplifiedDate(String simplifiedDate) {
    this.simplifiedDate = simplifiedDate;
}

public boolean isActive() {
    return active;
}

public void setActive(boolean active) {
    this.active = active;
}

public void setAlbumUUID(String albumUUID) {
    this.albumUUID = albumUUID;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

private String cover;
private String coverUUID = UUID.randomUUID().toString();

public String getCoverUUID() {
    return coverUUID;
}

public void setCoverUUID(String coverUUID) {
    this.coverUUID = coverUUID;
}

private String zipLocation;
private Date releaseDate;

public String getAlbumUUID() {
    return albumUUID;
}

public String getZipLocation() {
    return zipLocation;
}

public void setZipLocation(String zipLocation) {
    this.zipLocation = zipLocation;
}

public Date getReleaseDate() {
    return releaseDate;
}

public void setReleaseDate(Date releaseDate) {
    this.releaseDate = releaseDate;
}

public String getCover() {
    return cover;
}

public void setCover(String cover) {
    this.cover = cover;
}

public void setMixes(List<Mix> mixes) {
    this.mixes = mixes;
}

@OneToMany(mappedBy="album",cascade = CascadeType.ALL)
private List<Mix> mixes = new ArrayList<Mix>();

@OneToMany(mappedBy="author",cascade = CascadeType.ALL)
private List<Review> reviews = new ArrayList<Review>();

public List<Review> getReviews() {
    return reviews;
}

public void setReviews(List<Review> reviews) {
    this.reviews = reviews;
}

public String getName() {
    return name;
}

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

public List<Mix> getMixes() {
    return mixes;
}

public void setMixes(ArrayList<Mix> mixes) {
    this.mixes = mixes;
}
}

这是 Contact 类:

package science.softdev.SongPromoter.model;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;


@Entity
public class Contact {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idContact;
private String name;
private String email;
private String contactUUID = UUID.randomUUID().toString();
private boolean active;

@OneToMany(mappedBy = "author")
private List<Review> reviews = new ArrayList<Review>();

public List<Review> getReviews() {
    return reviews;
}

public void setReviews(List<Review> reviews) {
    this.reviews = reviews;
}

public boolean isActive() {
    return active;
}

public void setActive(boolean active) {
    this.active = active;
}

public String getContactUUID() {
    return contactUUID;
}

public void setContactUUID(String contactUUID) {
    this.contactUUID = contactUUID;
}

public int getIdContact() {
    return idContact;
}

public void setIdContact(int id) {
    this.idContact = id;
}

public String getName() {
    return name;
}

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

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}
}

最佳答案

我最终通过将持久性提供程序从 EclipeLink 更改为 Hibernate(在 Payara 服务器 4.1 中运行)解决了这个问题。我在互联网上找不到与此问题相关的任何可以帮助我解决问题的资源。它可能是 EclipseLink 2.6.3 的一个未报告的错误,因为只需切换 JPA 提供程序即可解决该问题。

关于java - 无法预部署处于无效状态的 PersistenceUnit [PU] [DeployFailed],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418851/

相关文章:

java - JPA Eclipse "Generating Tables From Entities"永远挂起

Java NIO 套接字 : the server doesn't receive the second message over the same socket

java - 将 VARBINARY 值隐式转换为 NUMERIC 字段期间出现域错误?

JavaFx : java. io.FileNotFoundException(访问被拒绝)

java - 运行我的应用程序的 EntityManager 没有持久性提供程序

javax.persistence.PersistenceException : org. hibernate.exception.GenericJDBCException:无法执行查询

postgresql - JPQL EclipseLink 分页

java - 为什么@Transactional 在另一项提交失败时不回滚一项提交?

jpa - LocalDateTime 和 JodaDate 冲突

java - 是否可以使用通过蓝图注入(inject)的 OSGi Enterprise 4.x 和 JPA 2.1 实体监听器?