gpt4 book ai didi

java - JPA - 实体不持久

转载 作者:行者123 更新时间:2023-11-30 09:41:06 25 4
gpt4 key购买 nike

这是我的 persistence.xml :

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="miniDS" transaction-type="JTA">
<jta-data-source>java:/miniDS</jta-data-source>

<class>com.company.model.Ordre</class>

<properties>
<!-- Options Hibernate -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.default_schema" value="mini" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
</properties>
</persistence-unit>

我的代码:

// Create order
Ordre o = new Ordre();
o.setDate(req.getParameter("date"));
o.setMotif(req.getParameter("motif"));

log.info("Ordre: " + o.getDate() + " " + o.getMotif());

OrdreService os = new OrdreService();
os.persist(o);//This method is NOT even called !

// Process application flow here...

OrdreService.java :
public class OrdreService {
private OrdreDAO dao;

public OrdreService() {
dao = new OrdreDAO();
}

public void persist(Ordre o) {
System.out.println("Service persist");
dao.persist(o);
}
//...
}

OrdreDAO.java :
public class OrdreDAO {
private EntityManagerFactory emf;
private EntityManager em;

public OrdreDAO() {
emf = Persistence.createEntityManagerFactory("miniDS");
em = emf.createEntityManager();
}

public void persist(Ordre o) {
System.out.println("DAO persist");
EntityTransaction et = null;

try {
et = em.getTransaction();

et.begin();
em.persist(o);

System.out.println("commit ?");

if (et != null) {
if (et.isActive()) {
et.commit();
}
}
} catch (Throwable t) {
t.printStackTrace();
if (et != null) {
if (et.isActive()) {
et.rollback();
}
}
}
}

//...
}

OrdreService.persist 永远不会被调用:\OrdreDAO.persist 也是。

JBoss 怎么了?

JBoss 5.1.0.GA
PostgreSQL 8.3
JPA 1

最佳答案

当您使用 ' <jta-data-source> ' 在 persistence.xml 文件中将事务类型设置为 JTA:

<persistence-unit name="your_pu_name" transaction-type="JTA">

关于java - JPA - 实体不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com