java持久性适用于从数据库读取,无提示无法插入/更新

时间:2011-10-17 15:35:51

标签: java insert persistence persist

我使用JPA创建了一个简单的java web(Vaadin)应用程序项目,它适用于从数据库中读取实体。当我尝试使用persist()或merge()时,数据库中没有任何反应。 查看日志时,有SELECT查询,但没有INSERT / UPDATE。

我正在使用Glassfish 3.1和JDBC资源定义,persistence.xml来使用该资源(JTA)。 我使用的是Eclipse自动生成的默认配置文件。

还有另一个类似的项目由其他人完成,使用相同的JTA并且不会出现此问题。查看其配置并没有发现任何重要的内容。

两个项目都不使用交易。

的persistence.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...
}

1 个答案:

答案 0 :(得分:0)

好的,事情似乎很简单,但事实并非如此。

这篇文章给了我很多帮助:Hibernate doesn't save and doesn't throw exceptions?

首先 - JPA需要某种交易机制。通常它在下面管理,不需要设置。 这意味着最简单的方法是创建一个EJB(Enterprise Java Bean)项目,其中EntityManager将注入@PersistenceContext。如果有人想在本地创建EntityManager(没有EJB),则仍然需要提供事务机制。以上帖子中的更多信息。