标签: entitymanager

查询后,EntityManager不刷新数据

我当前的项目使用HSQLDB2.0和JPA2.0.

该方案是:我查询数据库得到的名单contactDetailsperson.我contactInfo在UI处删除单个但不保存该数据(Cancel保存部分).

我再次执行相同的查询,现在结果列表比先前的结果小1,因为我在UI处删除了一个contactInfo.但contactInfo如果我交叉检查,那仍然可以在DB上找到.

但是如果我entityManager.clear()在查询开始之前包含,我每次都会得到正确的结果.

我不明白这种行为.有人能说清楚吗?

jpa hsqldb entitymanager jpa-2.0

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

如何避免使用空值覆盖非空值?

我正在使用spring MVC从客户端接收JSON并自动从中创建一个对象.问题是客户端不向服务器发送实体中的所有字段,但某些字段为空并覆盖调用userDao.persist(user)的现有值.例如,我有这个实体:

@Entity
public class User {

    @Id @GeneratedValue
    private int id;

    private String username;
    private String password;
    private String email;
Run Code Online (Sandbox Code Playgroud)

但是用户从不向我发送密码,因此从JSON构建的对象的"密码"字段为空.我不希望密码字段被空值覆盖.有一种方法可以说"休眠",如果你发现一个空值忽略它并且不覆盖数据库中保存的值?".我无法相信这个看似简单的问题没有一个简单的解决方案.

java hibernate jpa entitymanager

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

Spring JPA Read Write splitting - 有事务使用write数据源

我有一个使用Hibernate/JPA,Spring和Jersey的应用程序.在我的应用程序上下文中,我设置数据源,定义实体管理器工厂,使用该实体管理器工厂设置事务管理器,并使用事务注释注释各种服务方法,因此我还有tx:annotation-driven definition to wire在我的交易经理需要的地方.这个设置很好,我已经能够读写得很好.我想转到数据库设置,我有一个主机与多个从属(MySQL).因此,我希望所有使用transactional注释的方法都使用指向主数据库服务器的数据源,并使用所有其他方法来使用从服务器的连接池.

我尝试创建两个不同的数据源,两个不同的实体管理器工厂和两个不同的持久性单元 - 至少可以说是丑陋的.我尝试了一个MySQL代理,但是我们遇到了更多问题.连接池已在servlet容器中处理.我可以在Tomcat中实现读取事务并将其定向到正确的数据库服务器的东西,还是有办法让所有那些使用事务注释注释的方法使用特定的数据源?

spring tomcat hibernate jpa entitymanager

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

Symfony获取/持久化面向实体的服务命名约定和最佳实践

Symfony2应用程序通常具有一组实体.Doctrine EntityManager通常用于获取和持久化这些实体.

实体在整个应用程序中的多个位置使用; 对于许多实体和每个实体,包装给定实体的处理以及在服务中提取/持久化是有意义的.

例如,对于一个User实体,可能有一个UserServicewith fetchUser($user_id)persistUser(User $user)方法(或者只是fetch()persist()方法,这只是一个例子.

应用程序最终可以获得许多面向实体的服务,用于获取和持久化实体.这些服务的接口类似,处理的实体类型不同.

应用程序可以包含许多面向实体的服务似乎是一种常见的情况.因此,命名和构建此类服务的问题是一个常见问题.

对于新的应用程序需要的,例如,一个基地的创建EntityService和孩子UserService,WidgetServiceProductService班感觉重复,如用这样的处理方面应该是一个解决问题的方法.

  • 是否有将此类实体管理相关服务引入Symfony应用程序的最佳实践?

    这感觉它应该是一个已经解决的问题,可能会有一个很好的设计模式.

  • 是否有建议遵循的命名约定?

    我在不同的应用程序中观察到,选择"UserManager"和"UserService"作为服务名称.是否有普遍的公约?

naming-conventions entitymanager symfony

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

在entitymanager上使用unwrap方法获取本机hibernate会话后,我必须关闭它们吗?

我的代码看起来像这样.

 this.entityManager = AppFactory.instance().getEntityManagerFactory().createEntityManager();
 this.hibernateSession = entityManager.unwrap(Session.class);
 try{
 //do some queries using both entityManager and hibernateSession
 }finally{
 this.entityManager.close();
 }
Run Code Online (Sandbox Code Playgroud)

但我似乎在某个地方有连接泄漏.我想知道我是否应该关闭entityManager和hibernateSession.还有其他人在这种情况下工作过吗?

hibernate entitymanager

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

选择给定数据时,防止刷新EntityManager

我正在开发一个JPA应用程序(使用hibernate),我正在使用AutoFlush功能.

默认情况下,每当我们处理任何实体的查询时,都会刷新完整的EntityManager.在大多数情况下这是可以的:我们希望JPA处理针对最新数据库的查询.

但是,我们还在DB中存储了一些功能参数.这与我们的核心业务模型完全分离,我们不希望选择我们刷新EM的参数:参数的获取可能在过程中发生得非常深,当我们知道它时我们就失去了冲洗EM的控制;好的.

实际上,这会导致一些DB约束异常:数据模型尚未一致(在进程的中间),并且选择参数会强制刷新此数据模型.

我正在考虑添加第二个entityManager,只是参数,但我发现它有点矫枉过正.

可以更轻松地解决吗?使用参数DAO上的隔离级别,以便在单独的事务中处理参数?

hibernate jpa transactions flush entitymanager

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

Hibernate EntityManager:删除引用的实体不工作

我当前正在努力删除一个涉及各种关系的实体(仅限@ManyToOne) - 但是,Hibernate不会删除任何内容 - 在调用之后em.remove一切都保持不变.


我有5个实体(E1 - E5),引用有E6问题的实体(),如下所示:

@Entity
public class EX {
    @OneToMany(mappedBy = "eX", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
    private Set<E6> e6s;  
}
Run Code Online (Sandbox Code Playgroud)

E6本身有相反的@ManyToOne关系:

public class E6{

    @ManyToOne(optional = false)
    private E1 e1;       

    @ManyToOne(optional = false)
    private E2 e2;

    @ManyToOne(optional = false)
    private E3 e3;

    @ManyToOne(optional = false)
    private E4 e4;

    @ManyToOne(optional = false)
    private E5 e5;
}
Run Code Online (Sandbox Code Playgroud)

(遗漏了ID,其他列等......)


每当我打电话时em.remove(instanceOfE6),根本没有任何反应 …

hibernate jpa cascade entitymanager

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

没有可用于当前线程的实际事务的EntityManager - 无法可靠地处理"持久"调用

没有可用于当前线程的实际事务的EntityManager - 无法可靠地处理"持久"调用

当我使用JUnit进行测试时,persist方法有效,我看到我的对象已插入,但是当我通过Controller调用该方法时不起作用

这是我的项目:

applicationContext.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">



<!--    <bean id="notification" class="com.app.sqli.notification.NotificationTask" /> -->

<!--    <task:scheduled-tasks> -->
<!--        <task:scheduled ref="notification" method="notifier" cron="*/2 * * * * *"/> -->
<!--    </task:scheduled-tasks> -->

<context:component-scan base-package="com.app.sqli" />  

    <mvc:annotation-driven />
    <bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource" />
       <property name="packagesToScan" value="com.app.sqli.entities" />
      <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
      </property>
      <property name="jpaProperties">
         <props>
            <prop key="hibernate.hbm2ddl.auto">validate</prop>
            <prop …
Run Code Online (Sandbox Code Playgroud)

jpa spring-mvc entitymanager

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

当分离在Eclipselink中未按预期工作时,对惰性(未加载)集合的JPA调用方法

最近我尝试了一点JPA,试图更多地理解整个框架.我使用Eclipselink作为JPA提供程序.

我有两个实体有一个@OneToMany关系(一个人有很多地址)是懒惰加载.

当我加载一个人实体,分离它然后尝试访问(未加载)地址...它作为一个魅力.在调试时,我可以看到在执行size()地址列表的方法时执行了数据库查询.

我不明白为什么会有效.我希望有某种例外.我在最后几天(即这个链接)已经阅读了很多关于jpa等的内容,但是所有内容都指出了我不应该工作的结论.

任何人都可以解释为什么有效吗?

@Stateless
public class Test {
    @PersistenceContext(unitName="TestPU") EntityManager em;

    public void test() {
        Person person = em.find(Person.class, 1);

        System.out.println(person);

        System.out.println("em.contains(person): " + em.contains(person);

        em.detach(person);

        System.out.println("em.contains(person): " + em.contains(person);

        person.getAddresses().size();

        System.out.println("em.contains(person): " + em.contains(person);

        System.out.println(person);

    }
}
Run Code Online (Sandbox Code Playgroud)

结果日志将是

DEBUG: SELECT ... from PERSON WHERE (id = ?)
Person{id=1, name=Test, addresses={IndirectList: not instantiated}}
em.contains(person): true
em.contains(person): false
DEBUG: SELECT ... FROM ADDRESSES where (address_fk = ?)
em.contains(person): false
Person{id=1, name=Test, addresses={[Address{id=10, city=Testcity}]}}
Run Code Online (Sandbox Code Playgroud)

java jpa entitymanager detach eclipselink

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

Symfony应用程序在获取EntityManager时卡住

我正在开发一个具有Web组件(通过浏览器访问)和后台任务处理组件的应用程序,Web组件将一些运行时间长的东西委托给该应用程序。

当我刷新Web浏览器时才发现它无限期加载(刚发现是AJAX,但后来出现在正常请求中),这只是一个问题。

它看起来似乎并不很明显,但是一旦我关闭了后台Symfony命令,该命令也利用EntityManager了浏览器,它就会被解除阻止并继续进行请求。

我的应用程序用于RabbitMQ存储由Web组件发布的作业请求。该Symfony命令使用相同的“主干”来创建RabbitMQ使用者并接受这些作业。

我试过了,没有任何结果:

  • 重新开始 Apache
  • 重述 RabbitMQ
  • 清除RabbitMQ队列
  • EntityManagers对Web和命令使用不同

我使用OldSoundRabbitMqBundlelink)促进两者之间的通信。

无论调用什么操作,Web组件都会卡住(与RabbitMQ生产者无关)。

有人偶然发现类似问题吗?

这发生在开发箱上,我还没有在生产服务器上试用它,直到我找到更多有关此事的机会。

entitymanager rabbitmq symfony doctrine-orm

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