2014-03-01 26 views
1

您好,我正在使用Java EE 7。代码得到了以下结构。持久单元错误更多2个EntityManagers 1个持续单元?

模型 - >实体Bean

业务 - >服务类模型(每包含的EntityManager)

演讲 - 对服务>命名SessionScoped豆类与@EJB

当我测试程序只有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> 

FilmService.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<>(); 

Tag.class实体

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

回答

1

我认为,持久性单元名称为watchuwantPU,不LizenzService。检查@PersistenceContext注释。

+0

此外,请注意,按照惯例,持久性配置是在名为'persistence.xml'的文件中完成的。 –

+0

如果编辑过我的帖子并插入新的错误信息。我也有persistence.xml – user2742409

+0

好吧,现在我明白了。看起来你在一个实体类中的对象关系映射中有一些错误。你可以发布“标签”类的内容吗?它看起来像是在一个String类型的字段上定义了一个关系(也许是一个@ ManyToOne注解),这是一种错误。 –

相关问题