Spring实体未保存到数据库

时间:2015-10-30 10:34:37

标签: java spring jpa spring-data-jpa

我们已经设置了这样的Spring框架:

@Eager
public interface CatalogElementRepository extends PagingAndSortingRepository<CatalogElementEntity, Long> {

}

@Service
public class CatalogImpl implements CatalogManager {

    @Inject
    CatalogElementRepository catalogElementRepository;

    @Override
    public CatalogElement createCatalogElement(CatalogElementEntity catalogElement) {
    return this.catalogElementRepository.save(catalogElement);
    }
}

@Stateless
@Remote(CatalogManager.class)
public class CatalogManagerBean implements CatalogManager {

    @Inject
    CatalogManager delegate;

    @Override
    public CatalogElement createCatalogElement(CatalogElementEntity catalogElement) {
        return this.delegate.createCatalogElement(catalogElement);
    }
}

因此,每当有人在远程接口createCatalogElement上调用该方法时,我都会假设该实体存储在数据库中。它没有(奇怪的是,findOne仍然返回同一个实体,但它无法通过findByProperty找到。

Other questions说要添加@Transactional,所以我在方法和类上添加@javax.transaction.Transactionalorg.springframework.transaction.annotation.Transactional以确保安全,没有任何效果

可能是什么问题?

我没有看到Spring Framework的任何配置文件,但它是一个遗留项目,所以它们可能只是被隐藏得很好。

1 个答案:

答案 0 :(得分:0)

出于某种原因,使用此类作为EntityManager帮助的生产者:

public class SpringConfig {

@PersistenceUnit
EntityManagerFactory emf;

@PersistenceContext
EntityManager em;

@Produces
@ApplicationScoped
public EntityManagerFactory createEntityManagerFactory() {
    return this.emf;
}

@Produces
public EntityManager createEntityManager() {
    return this.em;
}

public void close(@Disposes EntityManagerFactory entityManagerFactory) {
    entityManagerFactory.close();
}

public void close(@Disposes EntityManager entityManager) {
    entityManager.close();
}
}