Spring+CDI+JPA+Tomcat7(JDK7)+Hibernate不在mysql上插入

Spring+CDI+JPA+Tomcat7(JDK7)+Hibernate不在mysql上插入,spring,hibernate,jakarta-ee,jpa,cdi,Spring,Hibernate,Jakarta Ee,Jpa,Cdi,我正在尝试将CDI与Spring和JPA hibernate结合使用,但我遇到了一些问题 伊莫维尔实体 @Entity @Table(name="Imovel") public class Imovel implements Serializable, BaseEntity{} 伊莫维豆 @Named @ViewScoped public class ImovelBean implements Serializable { @Inject private ImovelDao imovelDa

我正在尝试将CDI与Spring和JPA hibernate结合使用,但我遇到了一些问题

伊莫维尔实体

@Entity
@Table(name="Imovel")
public class Imovel implements Serializable, BaseEntity{}
伊莫维豆

@Named
@ViewScoped
public class ImovelBean implements Serializable {

@Inject
private ImovelDao imovelDao;
}
伊莫韦尔道

public class ImovelDao implements Serializable {

private static final long serialVersionUID = 1L;
private EntityManager manager;

@Inject
public ImovelDao(EntityManager manager) {
    this.manager = manager;
}

public Session getSession() {
    return (Session) manager.unwrap(Session.class);
}

public void insert(Imovel imovel) {

    getSession().save(imovel);

}
}
当我尝试插入:

休眠日志记录:

插入 进入 伊莫维尔 拜罗、cep、cidade、complemento、endereco、estado、numero、observacao、quarto、tipoImovel、Tipositacao、tipoVenda、valor 价值观

但我的实体并没有在数据库中持久化

使用列表它工作:

 Criteria cri = getSession().createCriteria(Imovel.class)
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .add(Restrictions.eq("tipoSituacao", TipoSituacao.Ativo));

我使用persistence.xml、web.xml、beans.xml、context.xml和applicationContext.xml。如果需要更多信息,请

我不熟悉Spring和Tomcat,但我认为这不是问题。我将尝试描述我使用的设计解决方案

当我想向服务层注入一些DAO时,我总是将我的DAO命名为@Inject并使用@Inject。另外,当我想将EntityManager注入我的DAO时,我使用@PersistenceContext注释。然后,在DAO中,当我想插入到表中时,我只执行entityManager.persistentity,或者当我想从…中选择*时,我只执行entityManager.findYourEntity.class。。。。我也使用GenericDAO模式,但这不是必需的

我不知道Spring如何处理事务,但我怀疑您的服务方法中有@Transactional annotation之类的东西,请不要忘记它


更新:你能展示你的persistence.xml吗?

你为什么不简单地使用实体管理器,你到底为什么要打开会话包?。只要坚持使用manager.persist,而不是使用丑陋的hack。您的代码中似乎没有任何与事务相关的内容,没有事务,没有提交,没有持久性…@m-deinum我试图使用manager.persist,但它不起作用。也没有日志错误。我想使用hibernate会话的一些部分,比如标准之类的东西。因此,我认为它与JPA或Hibernate无关。您在哪里开始事务?您使用的是CDI焊接还是弹簧?@JohnAment要检查哪个文件?我发布了…JPA有一个与hibernate的Criteria API相似的Criteria builder。如果您仍然想使用标准,那么只需在该位置使用会话,不要在任何地方都使用它,因为它只会增加复杂性。正如我在最初的评论中所说,您的代码中似乎没有任何与事务相关的内容,没有事务,没有提交,没有持久性。我尝试了这个方法,但没有成功。我看到查询的事实并不意味着数据实际上已提交到数据库。我认为我的问题在于注入事务。另外,您应该将日志级别设置为调试和查看日志,它可能包含有用的信息。这很奇怪。如果通过实体管理器选择然后插入然后再次选择,结果会是什么?两个选择上的空表?我的意思是,做entitymanager.find然后entitymanager.Persistence然后entitymanager.find.Yes!如果我直接在mysql上保存某个日期,em.find工作!这意味着与数据库和连接无关是可以的。它与您的事务相关,正如我在其他注释中提到的,find直接从一级缓存读取。它将不在数据库中。