我使用 JPA 创建了一个简单的 Java Web (Vaadin) 应用程序项目,它适用于从数据库中读取实体。当我尝试使用persist() 或merge() 时,数据库中没有任何反应。查看日志时,有 SELECT 查询,但没有 INSERT / UPDATE。
我正在使用定义了 JDBC 资源的 Glassfish 3.1,persistence.xml 来使用该资源 (JTA)。我正在使用由 Eclipse 自动生成的默认配置文件。
还有其他人做的另一个类似的项目,使用相同的JTA,没有出现这个问题。查看了它的配置,并没有发现任何重要的东西。
这两个项目都不使用事务。
持久性.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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_2_0.xsd">
<persistence-unit name="MapperPersistence">
<jta-data-source>mapper</jta-data-source>
<class>pl.bdk.mapper.domain.jpaImpl.MappingImpl</class>
...
<class>pl.bdk.mapper.domain.jpaImpl.UserImpl</class>
<properties>
<property name="eclipselink.logging.level" value="FINE" />
</properties>
</persistence-unit>
</persistence>
Java 代码
public class MappingService {
public static int createMapping(String clientProductId, User user) {
MappingImpl mapping = new MappingImpl();
mapping.setUser(user);
mappingDao.save(mapping);
return mapping.getMappingId();
}
}
...
public class MappingDao {
public void save(MappingImpl mapping) {
entityManager.persist(mapping);
}
}
...
@Entity
@Table("t_mapping")
public class MappingImpl() {
@Id
@SequenceGenerator(name="T_MAPPING_MAPPINGID_GENERATOR", sequenceName="S_MAPPING_ID", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="T_MAPPING_MAPPINGID_GENERATOR")
private Integer id;
@ManyToOne
@JoinColumn(name="user_id")
private User user;
... getters and setters...
}