【问题标题】:Persistance Unit Error More 2 EntityManagers 1 Persitance Unit?持久性单元错误 更多 2 EntityManager 1 个持久性单元?
【发布时间】:2014-03-01 13:33:28
【问题描述】:

您好,我正在使用 Java EE 7。代码结构如下。

模型 --> 实体 Beans

business --> 模型的服务类(每个都包含一个EntityManager)

presentation --> 在服务上使用@EJB 命名的 SessionScoped Bean

当我只用 1 个服务 / EntityManager 测试程序时,一切正常,但现在当我添加第二个服务类时,我得到了这个错误:

>

SEVERE:   Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
SEVERE:   javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [watchuwantPU] failed.
Internal Exception: Exception [EclipseLink-7250] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ValidationException
Exception Description: [class model.Tag] uses a non-entity [class java.lang.String] as target entity in the relationship attribute [field beschreibung].
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createPredeployFailedPersistenceException(EntityManagerSetupImpl.java:1950)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1941)
    at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:322)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:199)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:107)
    at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:223)
    at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
    at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:230)
    at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)

persistence.xml

<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="watchuwantPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>watchuwant</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
  <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
</properties>
</persistence-unit>
</persistence>

电影服务.java

@Stateless

公共类 FilmService {

@PersistenceContext(name="watchuwantPU", unitName = "watchuwantPU")
private EntityManager em;

public void add(Film Film){
    em.persist(Film);
}

public List<Film> findAll(){
    return em.createQuery("select f from Film f order by f.id").getResultList();
}
}

LizenzPM.java

@SessionScoped
@Named

public class LizenzPM implements Serializable{

private String lizenzgeber;
private String lizenztyp;
private String lizenzurl;
private Date erteiltAm;


@EJB
private LizenzService service;

Film.java 实体

@Entity
public class Film implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String titel;

@OneToMany(mappedBy = "parent", cascade=CascadeType.ALL, orphanRemoval=true)
private List<Tag> tags = new LinkedList<>();

标签类实体

@Entity
public class Tag implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(optional = false)
private String beschreibung;
private Film parent;

【问题讨论】:

    标签: java jpa java-ee-7


    【解决方案1】:

    我认为持久化单元名称是watchuwantPU,而不是LizenzService。检查@PersistenceContext注解。

    【讨论】:

    • 另外,请注意,按照惯例,持久性配置是在一个名为 persistence.xml 的文件中完成的。
    • 如果已编辑我的帖子并插入新的错误消息。我也有persistence.xml
    • 好的,现在我明白了。看起来您的一个实体类中的对象关系映射中有一些错误。可以发一下Tag的课程内容吗?看起来您是在 String-typed 字段上定义关系(可能是 @ManyToOne 注释),这有点错误。
    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多