Eclipselink 实体持续存在问题

Posted

技术标签:

【中文标题】Eclipselink 实体持续存在问题【英文标题】:Eclipselink entity persist issue 【发布时间】:2016-03-20 17:48:19 【问题描述】:

我正在从一些在线教程中学习 Eclipselink。目前在持久化对象时遇到问题。

线程“主”java.lang.IllegalStateException 中的异常:异常 说明:当前没有交易在 org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:123) 在 com.training.service.EmployeePersistance.main(EmployeePersistance.java:23)

我使用 JPA 连接器的数据库连接工作正常。我已经通过执行

测试了连接
System.out.println(Persistence.createEntityManagerFactory("_EclipseLinkTraining").isOpen());

返回 true。表未在 DB 中创建。执行代码后,表会自动生成,但对象没有持久化。以下是我的导致麻烦的代码: 实体类:

@Entity
public class Employee 
    @Id
    int empId;

    @Basic(optional=true)
    String empName;

    //getters and setters

persistance.xml:

<persistence-unit name="_EclipseLinkTraining" transaction-type="RESOURCE_LOCAL">
    <class>com.training.entity.Employee</class>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ecpliselink_training"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="root"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
</persistence-unit>

java主方法:

public static void main(String[] args) 
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("_EclipseLinkTraining");
    EntityManager manager = factory.createEntityManager();

    manager.getTransaction();

    Employee emp = new Employee();
    emp.setEmpId(1);
    emp.setEmpName("sam");
    manager.persist(emp);

    manager.getTransaction().commit();

    manager.close();
    factory.close();
    System.out.println("completed");

【问题讨论】:

【参考方案1】:

您正在获取事务,然后提交它,但您从未begun 它。因此,正如消息中所说,当前没有活动的交易。

【讨论】:

将我的代码更改为 manager.getTransaction().begin();它奏效了!自从开始使用 *** 以来,您第二次帮助了我!在几分钟内并发现解决方案。非常感谢。

以上是关于Eclipselink 实体持续存在问题的主要内容,如果未能解决你的问题,请参考以下文章

Eclipselink 实体类自动扫描发现非实体

Eclipselink 未检测到脏实体

Java JPA(EclipseLink)如何在持久化实际实体之前接收下一个 GeneratedValue?

EclipseLink + JPA + 通用实体 + SINGLE_TABLE 继承

EclipseLink 拒绝将 PostgreSQL 上的本机查询映射到实体

JPA 使用指南 /Eclipselink/JPA 实体生成器