首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法运行Java示例?

无法运行Java示例?
EN

Stack Overflow用户
提问于 2014-09-30 13:48:13
回答 1查看 159关注 0票数 0

(旧消息):我正在尝试让我的Java Project根据JPA参考指南运行。我正在使用野生蝇8和一个MySQL数据库。但是,当我试图坚持使用EntityManager时,我就会出错。我真的被困在这里了!(有人知道怎么回事吗??)

(编辑):好的,我现在的状态是下面这个。我不能删除@ManagedBean,因为我需要从XHTML页面(RichFaces)进行调用。因此,我把所有的JPA-东西放在一个单独的DbAccess类中。程序运行,但是一旦我按下按钮调用Index.doContentMock(),然后链接到DbAccess.doContentMock(),我就会看到下面的错误。出什么事了?

(编辑2):由于某种原因,在通过注入EntityManager进行更改之后,DbAccess仍然无法工作。为什么EntityManager不能工作?

我的XHTML调用者类:

代码语言:javascript
复制
import com.glasses.abc.business.Content;
import java.util.List;
import javax.ejb.Stateful;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@ManagedBean
public class Index {

    @Inject
    DbAccess dba;

    public void doContentMock() {
        System.out.println("XXXXX AUFRUFEN VON Index.doContentMock()");
        dba.doContentMock();
    }
}

我的内容实体类:

代码语言:javascript
复制
@Entity
public class Content implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String contentCode;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getContentCode() {
        return this.contentCode;
    }

    public void setContentCode(String contentCode) {
        this.contentCode = contentCode;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Content)) {
            return false;
        }
        Content other = (Content) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.glasses.abc.business.Content[ id=" + id + ", contentCode='" + contentCode + "' ]";
    }

}

我的新DbAccess课程:

代码语言:javascript
复制
@Stateful
public class DbAccess {
    @PersistenceContext(unitName = "AbcPU", type = PersistenceContextType.EXTENDED) // default type is PersistenceContextType.TRANSACTION
    EntityManager em;

    public void doContentMock() {
        System.out.println("XXXXX 0");
        System.out.println(em);
        System.out.println("XXXXX 1");
        Content content = new Content();
        System.out.println("XXXXX 2");
        content.setId((long) 5);
        System.out.println("XXXXX 3");
        content.setContentCode("Hier ist ein bestimmter Code, der in die Datenbank soll!");
        System.out.println("XXXXX 4");
        System.out.println(content);
        try {
        em.persist(content);
        } catch (Exception ex) {
            System.out.println("XXXXX Could not persist:");
            System.out.println(ex.getMessage());
        }
        System.out.println("XXXXX 5");
    }
}

我的persistence.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<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="AbcPU" transaction-type="JTA">
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/abc?zeroDateTimeBehavior=convertToNull"/>
            <property name="javax.persistence.jdbc.password" value="pwd"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
        </properties>
    </persistence-unit>
</persistence>

我的错误:

代码语言:javascript
复制
22:58:17,695 INFO  [stdout] (default task-10) XXXXX 0
22:58:17,695 INFO  [stdout] (default task-10) ExtendedEntityManager [abc.war#AbcPU]
22:58:17,695 INFO  [stdout] (default task-10) XXXXX 1
22:58:17,696 INFO  [stdout] (default task-10) XXXXX 2
22:58:17,696 INFO  [stdout] (default task-10) XXXXX 3
22:58:17,696 INFO  [stdout] (default task-10) XXXXX 4
22:58:17,696 INFO  [stdout] (default task-10) com.glasses.abc.business.Content[ id=5, contentCode='Hier ist ein bestimmter Code, der in die Datenbank soll!' ]
22:58:17,697 INFO  [stdout] (default task-10) XXXXX Could not persist:
22:58:17,697 INFO  [stdout] (default task-10) org.hibernate.PersistentObjectException: detached entity passed to persist: com.glasses.abc.business.Content
22:58:17,698 INFO  [stdout] (default task-10) XXXXX 5
22:58:17,702 INFO  [stdout] (default task-10) XXXXX AUFRUFEN VON getContent(0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-30 14:14:59

在持久性上下文注释中添加另一个属性:@PersistenceContext(unitName = "AbcPU",type = PersistenceContextType.EXTENDED)

那它可能会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26122523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档