我有一个EJB,我正在将一个对象保存到数据库。 在我看到的一个例子中,一旦保存了这个数据(EntityManager.persist),就会调用EntityManager.flush(); 为什么我需要这样做? 我正在保存的对象不会附加在方法的后面使用。 事实上,一旦保存方法返回,我希望资源被释放。 (示例代码也在删除调用中执行此操作。) if (somecondition) entityManager.persist(unAttachedEntity); else { attachedEntityObject.setId(unAttachedEntity.getId()); } entityManager.flush();
什么是区别 <T> T EntityManager.find(Class<T> entityClass, Object primaryKey) and <T> T EntityManager.getReference(Class<T> entityClass, Object primaryKey) ? 我认为getReference返回实体,如果它被pipe理。 并find返回实体,如果它被pipe理,否则在数据库上执行SQL以使其进行pipe理。 请确认。 上下文:从webapp获取要删除的对象的主键(pk的types为long); 要把实体pipe理删除。 EntityManager.remove(Object entity) 通过pipe理实体到entitymanager删除方法“最好的和正确的select? find或得到引用?
[Doctrine\ORM\ORMException] The EntityManager is closed. 插入数据后,我得到一个DBALexception后,EntityManagerclosures,我无法重新连接。 我试过这样但是没有得到连接。 $this->em->close(); $this->set('doctrine.orm.entity_manager', null); $this->set('doctrine.orm.default_entity_manager', null); $this->get('doctrine')->resetEntityManager(); $this->em = $this->get('doctrine')->getEntityManager(); 任何人有一个想法如何重新连接?
到目前为止,我的首选是始终使用EntityManager的merge()处理插入和更新。 但是我也注意到merge在更新/插入之前执行了额外的select查询,以确保logging在数据库中不存在。 现在我正在处理一个需要大量(批量)插入数据库的项目。 从性能的angular度来看,在绝对知道我总是创build一个要被保持的对象的新实例的场景中,使用persist而不是merge会有意义吗?
一个很长的问题,请忍受我。 我们正在使用Spring + JPA的Web应用程序。 我的团队正在通过注入EntityManagerFactory注入到GenericDAO (基于generics的DAO,由APPFUSE提供的东西,我们不使用JpaDaosupport ),注入EntityManager 。 我们正在使用“应用程序pipe理持久性”。 反对注入EntityManagerFactory的参数是太重了,所以不需要, EntityManager做我们需要的东西。 另外,由于Spring会为每个Web请求创build一个DAO的新实例(我怀疑这个),所以不会有任何并发问题,因为两个线程共享相同的EntityManager实例。 注入EFM的理由是,它是一个很好的实践,总是有一个良好的工厂处理。 我不确定哪个是最好的方法,有人可以请赐教吗?
有没有一种方法来初始化EntityManager没有定义持久性单元? 你可以给所有必要的属性来创build一个实体经理? 我需要在运行时从用户指定的值创buildEntityManager 。 更新persistence.xml并重新编译不是一个选项。 任何想法如何做到这一点是比欢迎!
我正在开发使用JPA的JavaSE应用程序。 不幸的是,我调用后得到null : Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 下面你会发现: 我的代码片段调用EntityManagerFactory并意外返回null 我的persistence.xml文件 我的项目结构 我的代码片段: public class Main { private static final String PERSISTENCE_UNIT_NAME = "MeineJpaPU"; private static EntityManagerFactory factory; public static void main(String[] args) { // I get null on this line!!! factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); EntityManager em = factory.createEntityManager(); // do stuff with entity manager … } } 我的persistence.xml: <?xml […]
我正在开始一个新的项目,我完全不熟悉JPA / Hibernate的使用。 我想了解如何正确使用EntityManager。 更确切地说,什么时候将其实例化,我需要多less,我是否应该closures它们,我应该把所有事情都交易吗? 无论如何,在我当前的代码中,当试图读取一个我以前保存的实体时,我得到了一个org.hibernate.LazyInitializationException。 我会理解相反的(阅读一个事务中的antity,然后试图将读取的实体保存在另一个事务中,但由于事务结束,实体是非托pipe的,因此保存失败),但是这个我不明白。 我把我的代码放在GitHub上( https://github.com/GaetanLeu/intl ),只是几个类。 我的主要是在src / sandbox / MessageSandbox.java,它在第28行失败,下面的stacktrace: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy – no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) at entity.MessageKey_$$_jvstfcc_0.toString(MessageKey_$$_jvstfcc_0.java) at java.lang.String.valueOf(String.java:2854) at java.lang.StringBuilder.append(StringBuilder.java:128) at com.google.common.base.Present.toString(Present.java:88) at java.lang.String.valueOf(String.java:2854) at java.io.PrintStream.println(PrintStream.java:821) at sandbox.MessageSandbox.main(MessageSandbox.java:28) 另外我从Hibernate得到了一个警告,说我的EntityManager已经存在,接下来会发生什么? EntityManagerFactory.createEntityManager方法是否返回现有的? WARN: HHH000436: Entity manager factory name […]
我有2个实体:国家(id,名称)和映射(ID,对象,internalId,externalId)。 国家和地图与协会没有关联(因为地图不仅有国家)。 我需要使用以下条件获取国家/地区的外部ID: country.id = mapping.internalId mapping.object = 'country' 所以我打算在Country中添加函数getExternalId() function getExternalId() { $em = Registry::getEntityManager(); $mapping = $em->getRepository('Mapping')->findOneBy(array( 'object' => 'country', 'internalId' => $this->getId() )); return !empty($mapping) ? $mapping->getExternalId() : false; } 问题: 在实体内部使用EntityManager是不是很好的做法? 如果没有,请解释如何获得外部身份证在我的情况? 也许有可能使用yaml文件关联Country和Mapping? 提前致谢!
EntityManager.merge()可以插入新的对象并更新现有的对象。 为什么要使用persist() (只能创build新的对象)?