Tag: jpa

何时使用EntityManager.find()与EntityManager.getReference()

我遇到了一种情况(我认为这很奇怪,但可能很正常),我使用EntityManager.getReference(LObj.getClass(),LObj.getId())获取数据库实体,然后将返回的对象传递给坚持在另一张桌子上。 所以stream量基本上是这样的: class TFacade { createT(FObj,AObj){ T TObj = new T(); TObj.setF(FObj); TObj.setA(AObj); … EntityManager.persist(TObj); … L LObj = A.getL(); FObj.setL(LObj); FFacade.editF(FObj); } } @ TransactionAttributeType.REQUIRES_NEW class FFacade { editF(FObj){ L LObj = FObj.getL(); LObj = EntityManager.getReference(LObj.getClass(),LObj.getId()); … EntityManager.merge(FObj); … FLHFacade.create(FObj,LObj); } } @ TransactionAttributeType.REQUIRED FLHFacade类{ createFLH(FObj,LObj){ FLH FLHObj = new FLH(); FLHObj.setF(FObj); FLHObj.setL(LObj); …. […]

Hibernate中的persist()和merge()有什么区别?

Hibernate中的persist()和merge()有什么区别? persist()可以创build一个UPDATE&INSERT查询,例如: SessionFactory sef = cfg.buildSessionFactory(); Session session = sef.openSession(); A a=new A(); session.persist(a); a.setName("Mario"); session.flush(); 在这种情况下查询将会像这样产生: Hibernate: insert into A (NAME, ID) values (?, ?) Hibernate: update A set NAME=? where ID=? 所以persist()方法可以生成一个Insert和一个Update。 现在用merge() : SessionFactory sef = cfg.buildSessionFactory(); Session session = sef.openSession(); Singer singer = new Singer(); singer.setName("Luciano Pavarotti"); session.merge(singer); session.flush(); 这是我在数据库中看到的: SINGER_ID […]

绕过Hibernate中的GeneratedValue(合并数据不在数据库?)

我的问题与[1]或[2]中描述的相同。 我需要手动设置一个默认的自动生成的值( 为什么?导入旧数据 )。 正如在[1]中所描述的,使用Hibernate的entity = em.merge(entity)将会做到这一点。 对我来说不幸的是, 我既没有错误,也没有任何其他的警告。 该实体不会出现在数据库中 。 我正在使用Spring和Hibernate EntityManager 3.5.3-Final。 有任何想法吗?

如何用JPA批注注释MYSQL自动增量字段

直接点,问题是保存对象运营商到MySQL数据库。 在保存之前,我尝试从这个表中select,它的工作原理,连接到数据库也是如此。 这是我的操作对象: @Entity public class Operator{ @Id @GeneratedValue private Long id; private String username; private String password; private Integer active; //Getters and setters… } 为了保存我使用JPA EntityManager的persist方法。 这里是一些日志: Hibernate: insert into Operator (active, password, username, id) values (?, ?, ?, ?) com.mysql.jdbc.JDBC4PreparedStatement@15724a0: insert into Operator (active,password, username, id) values (0, 'pass', 'user', ** NOT SPECIFIED […]

Hibernate:一对一延迟加载,可选= false

我遇到了一对一延迟加载在hibernate中无法正常工作的问题。 我已经解决了 ,但仍然没有正确理解会发生什么。 我的代码( 懒加载不工作在这里 ,当我拉人 – 地址也被提取): @Entity public class Person{ @Id @SequenceGenerator(name = "person_sequence", sequenceName = "sq_person") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence") @Column(name = "id") private long personID; @OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY) private Adress address; //.. getters, setters } @Entity public class Address { @Id @Column(name="id", unique=true, nullable=false) @GeneratedValue(generator="gen") @GenericGenerator(name="gen", strategy="foreign", […]

JPQL在select语句中创build新对象 – 避免还是拥抱?

我最近了解到,可以在JPQL语句中创build新的对象,如下所示: select new Family(mother, mate, offspr) from DomesticCat as mother join mother.mate as mate left join mother.kittens as offspr 这是要避免还是要拥抱? 根据良好的做法,何时使用这个function是合理的?

ORM映射中的“拥有方”是什么?

拥有方意味着什么? 什么是一些映射实例的解释( 一对多,一对一,多对一 )? 以下文字摘自Java EE 6文档中@OneToOne的描述。 你可以看到它拥有一面的概念。 定义一个单值关联到另一个具有一对一多重性的实体。 通常不需要显式指定关联的目标实体,因为通常可以从被引用的对象的types中推断出来。 如果关系是双向的, 则非拥有方必须使用OneToOne批注的mappedBy元素来指定拥有方的关系字段或属性。

PersistenceContext EntityManager注入NullPointerException

我有一个包含以下内容的战争: META-INF/MANIFEST.MF WEB-INF/classes/META-INF/persistence.xml WEB-INF/classes/com/test/service/TestServlet.class WEB-INF/classes/com/test/service/TestEntity.class WEB-INF/classes/jndi.properties WEB-INF/classes/postgresql-ds.xml WEB-INF/jboss-web.xml WEB-INF/web.xml index.jsp persistence.xml中: <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="test"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/TestDS</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> </properties> </persistence-unit> </persistence> web.xml中: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Test Web Application</display-name> […]

用hibernate.enable_lazy_load_no_trans解决Hibernate的Lazy-Init问题

我一直在遭受臭名昭着的hibernateexception org.hibernate.LazyInitializationException: could not initialize proxy – no Session 现在社区正在欢呼 <property name="hibernate.enable_lazy_load_no_trans" value="true"/> 说它解决了这个问题,但使用它注意 。 他们是什么意思,谨慎使用它? 这个属性实际上做了什么? 请给我任何见解。 提前致谢。

如何查看由JPA发出的SQL查询?

当我的代码发出这样的呼叫: entityManager.find(Customer.class, customerID); 我怎样才能看到这个调用的SQL查询? 假设我没有访问数据库服务器来分析/监视调用,有没有办法在我的IDE中logging或查看由JPA调用发出的相应的SQL查询? 我正在使用jTDS驱动程序针对SQL Server 2008 R2。