标签: entitymanager

JPA/EntityManager是否提供了类似于Spring的RowMapper的机制

我正在致力于标准化遗留代码库和新开发,以使用 EntityManager 进行持久化。然而,为了取得成功,我需要提供突破本机 SQL 并手动处理结果的能力。JPA EntityManager 几乎通过以下方式提供此功能:

em.createNativeQuery("select ... from my_table where ...");
Run Code Online (Sandbox Code Playgroud)

但我缺少的是执行 Spring 风格的 RowMappers 的能力。我可以看到有一些接近的机制。我当然可以使用注释、xml 等来映射实体,但我需要将代码放入结果集中每一行的处理中,因此这不是一个选项。我可以看到我可以传入 SQLResultSetMapping,但据我所知,这再次仅支持元数据映射。理想情况下,我需要的是以下内容:

em.createNativeQuery("select ... from my_table where ...",  
  new RowMapper {  
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {  
         MyObject o = new MyObject();  
         o.setMyCustomProperty( rs.get...() );  
         //...  
         return b;  
    }  
  }  
); 
Run Code Online (Sandbox Code Playgroud)

与上述等价的存在吗?我可以构造一个 SQLResultSetMapping 来完全控制上面的映射吗?

如果没有,我至少可以以标准方式获取 EM 底层的数据源,以便我可以使用 JdbcTemplate 包装它,并且没有两个路径来配置数据源吗?

DataSource ds = em.getDataSource();  
JdbcTemplate t = new JdbcTemplate(ds);  
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。

java spring hibernate jpa entitymanager

5
推荐指数
1
解决办法
1万
查看次数

什么时候不应该使用EntityManager.flush()?

为了同步和检索数据库生成的 ID,我觉得被迫EntityManager.flush()在几个地方调用。

除了性能影响之外,还有什么理由打电话flush()呢?

换句话说,我的 (DAO, ...) 方法的调用者是否有任何可观察到的差异(如果有/没有)flush()

我的场景是在支持 JPA 开发人员的框架上下文中。我将提供一些功能,这些功能可能需要也可能不需要flush()调用层次结构深处的某个地方。这些函数的用户是否必须知道是否/何时发生刷新,或者它是一个私有实现细节,对调用者没有明显影响?

java jpa flush entitymanager eclipselink

5
推荐指数
1
解决办法
7320
查看次数

通过@PersitenceContext或@PersitenceUnit注入EntityManagerFactory?

我一直认为@PersistenceContext用于将EntityManager注入到容器管理的应用程序中,而@PersistenceUnit用于注入EntityManagerFactory。

Javadoc 说

对于 PersistenceUnit ( http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceUnit.html )

表达对 EntityManagerFactory 及其关联的持久性单元的依赖关系。

对于PersistenceContext(http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceContext.html

表达对容器管理的 EntityManager 及其关联的持久性上下文的依赖关系。

到目前为止一切顺利,但后来我正在阅读 JPA 教程(请参阅https://docs.oracle.com/cd/E19798-01/821-1841/bnbqy/index.html),其中包含这样的示例

以下示例显示如何在使用应用程序管理的实体管理器的应用程序中管理事务:

@PersistenceContext
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
...
em = emf.createEntityManager();
try {
  utx.begin();
  em.persist(SomeEntity);
  em.merge(AnotherEntity);
  em.remove(ThirdEntity);
  utx.commit();
} catch (Exception e) {
  utx.rollback();
}
Run Code Online (Sandbox Code Playgroud)

那么如果我们谈论应用程序托管代码,PersistenceContext 也可以引用 EntityManagerFactory 吗?

免责声明——我猜与这个问题的答案无关——PersistenceUnit vs PersistenceContext

java jpa entitymanager

5
推荐指数
1
解决办法
2323
查看次数

如何在JPA中的db中保存对象后获取id?

当我在保存 ClaimDetail 对象后获取 id 然后获取该保存对象的 id 时,我遇到了问题,它是 0 。实际上我想获取保存的对象 Id 。但它没有来。我没有在 JPA 工作过。我创建了一个用于调度的 Spring Boot 应用程序。

这是我的 ClaimDetails.java 实体类:

@Entity
@Table(name = "claimtrans")
public class ClaimTrans {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

    claimDetail.setActive(1);
    claimDetail.setVersion(new Long(1));
    claimDetail.setCreatedBy(new Long(1));
    claimDetail.setCreatedDate(new Date());
    claimDetailService.saveClaimDetail(claimDetail);

int temp =claimDetail.getID()
Run Code Online (Sandbox Code Playgroud)

温度为0;

这是我的 JpaRepositoryFactory.java:

@Service
public class ClaimDetailService {

    private JpaRepositoryFactory jpaRepositoryFactory;

    @Autowired
    public ClaimDetailService(JpaRepositoryFactory jpaRepositoryFactory) {
        this.jpaRepositoryFactory = jpaRepositoryFactory;
    }

    @Transactional
    public void saveClaimDetail(ClaimDetail claimDetail) {
        JpaRepository<ClaimDetail, Long> mailAuditLogLongJpaRepository = jpaRepositoryFactory.getRepository(ClaimDetail.class);
        mailAuditLogLongJpaRepository.save(claimDetail);
    }

    public …
Run Code Online (Sandbox Code Playgroud)

mysql spring jpa entitymanager spring-boot

5
推荐指数
1
解决办法
2万
查看次数

为我的 EntityManager 获取空指针异常

使用 Wildfly 10 进行以下操作:JSON Web 服务通过 DAO 对象使用 hibernate 访问 postgresql 数据库。

更具体地说,我的 POJO User.java:

@Entity (name="User")
@Table(name = "users")
public class User {


    @Id @GeneratedValue
    @Column(name="id")
    private int id;

    @Column(name="username")
    private String userName;

    @Column(name="password")
    private String password;

    @Column(name="email")
    private String emailAddress;

    public User(String userName, String password, String emailAddress) {
        super();
        this.userName = userName;
        this.password = password;
        this.emailAddress = emailAddress;
    }

    public User() {
        super();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = …
Run Code Online (Sandbox Code Playgroud)

java postgresql hibernate entitymanager wildfly

5
推荐指数
1
解决办法
1万
查看次数

如何将 Symfony 自动装配与多个实体管理器一起使用

我想在使用 2 个不同实体管理器的服务中使用自动装配。如何实现这样的目标?

use Doctrine\ORM\EntityManager;
class TestService
{
    public function __construct(EntityManager $emA, EntityManager $emB)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 service.yml 文件的配置如下:

    app.testservice:
        class: App\Services\TestService
        arguments:
            - "@doctrine.orm.default_entity_manager"
            - "@doctrine.orm.secondary_entity_manager"
Run Code Online (Sandbox Code Playgroud)

entitymanager autowired symfony

5
推荐指数
2
解决办法
3771
查看次数

不推荐使用参数调用 Doctrine clear()

教义建议——

自 Doctrine/persistence 1.3 起,不推荐使用任何参数调用 Doctrine\ORM\EntityManager::clear() 来清除特定实体,并将在 2.0 中删除。

我们的 Symfony 代码库中有很多参考资料->clear(SpecificEntity::class),并且正在寻求更新这些内容,但我们正在努力在最新的升级指南中找到建议的替代方案。

在最新版本的 Doctrine 中是否有推荐的替代方案来清除特定实体?

doctrine entitymanager symfony

5
推荐指数
1
解决办法
4905
查看次数

在JBoss AS 7中捕获PersistenceException或ConstraintViolationException

我正处于从JBoss AS 6到JBoss AS 7的迁移过程中,并且我的测试有问题.我们假设一个简单的实体EJB:

@Entity public class MyTest implements Serializable
{
  @Id @GeneratedValue(strategy=GenerationType.AUTO)
  private long id;

  @NotNull
  private String headline;
}  //getter/setter
Run Code Online (Sandbox Code Playgroud)

在我@Stateless Bean做这样的事情(就像之前的JBoss5和JBoss6):

@Inject private EntityManager em;

public <T extends Object> T persist(T o) throws MyContraintViolationException
{
    System.out.println("***************** persist:");
    try
    {
      em.persist(o);
    }
    catch (Exception e)
    {
      System.out.println("*************** exception:");
      // Further investigation of Exception e,
      // then throw MyContraintViolationException
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我不违反@NotNull约束,这可以正常工作.如果headline==null,我得到例外,但不要输入我的catch块:

12:19:45 INFO  ******************** persist:
12:19:45 WARN …
Run Code Online (Sandbox Code Playgroud)

persistence ejb entitymanager jpa-2.0 jboss7.x

4
推荐指数
1
解决办法
1万
查看次数

如何在Entity中使用entityManager?

我在Entity类中有这个函数,但是getDoctrine并不喜欢......

public function getObject()
{
    $em = $this->getDoctrine()->getEntityManager();

    switch($this->objectType)
    {
        case 'video':
            return $em->getRepository('fdj2012AdminBundle:Video')->find($this->objectId);
            break;
        case 'default':
            return false;
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在我的实体中使用entityManager?

entity entitymanager symfony doctrine-orm

4
推荐指数
1
解决办法
9570
查看次数

检查实体是否已经持久保存到Symfony2中的EntityManager

在Symfony2中,是否可以检查特定实体是否已经持久存在并存在于EntityManager中?

我正在处理一些数据导入,一些记录可能是完全重复的.我正在进行批量插入,即只在持久存在一定数量的实体后才调用flush().所以,我需要检查我试图保持的实体是否已经不在EntityManager中.

doctrine entitymanager symfony

4
推荐指数
1
解决办法
3672
查看次数