Tag: jpa

EntityManager.flush是做什么的,为什么我需要使用它?

我有一个EJB,我正在将一个对象保存到数据库。 在我看到的一个例子中,一旦保存了这个数据(EntityManager.persist),就会调用EntityManager.flush(); 为什么我需要这样做? 我正在保存的对象不会附加在方法的后面使用。 事实上,一旦保存方法返回,我希望资源被释放。 (示例代码也在删除调用中执行此操作。) if (somecondition) entityManager.persist(unAttachedEntity); else { attachedEntityObject.setId(unAttachedEntity.getId()); } entityManager.flush();

@ManyToOne(可选= false)和@Column(nullable = false)之间有什么区别?

在JPA中,我很困惑何时使用属性optional=false和注解@Column(nullable=false) 。 有什么不同?

设置由数据库生成的JPA时间戳列?

在我的SQL Server 2000数据库中,我有一个名为lastTouched DATETIMEtypes的时间戳(在函数中不是数据types),其列表名为lastTouched设置为getdate()作为其默认值/绑定。 我正在使用Netbeans 6.5生成的JPA实体类,并在我的代码中 @Basic(optional = false) @Column(name = "LastTouched") @Temporal(TemporalType.TIMESTAMP) private Date lastTouched; 但是,当我尝试将对象放入数据库时​​, javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.generic.Stuff.lastTouched 我已经尝试设置@Basic设置为(optional = true) ,但是会引发一个exception,说数据库不允许TIMESTAMP列的null值,而不是按devise。 ERROR JDBCExceptionReporter – Cannot insert the value NULL into column 'LastTouched', table 'DatabaseName.dbo.Stuff'; column does not allow nulls. INSERT fails. 我以前得到这个纯Hibernate的工作,但我有感觉切换到JPA,并不知道如何告诉它,这列是假设在数据库端生成。 请注意,我仍然使用Hibernate作为我的JPA持久层。

JPA /标准API – 像和平等的问题

我试图在我的新项目中使用Criteria API: public List<Employee> findEmps(String name) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Employee> c = cb.createQuery(Employee.class); Root<Employee> emp = c.from(Employee.class); c.select(emp); c.distinct(emp); List<Predicate> criteria = new ArrayList<Predicate>(); if (name != null) { ParameterExpression<String> p = cb.parameter(String.class, "name"); criteria.add(cb.equal(emp.get("name"), p)); } /* … */ if (criteria.size() == 0) { throw new RuntimeException("no criteria"); } else if (criteria.size() […]

JPA 2 CriteriaQuery,使用一个限制

我正在使用JPA 2.出于安全原因,我正在使用CriteriaQuery的安全types(因此,我不search任何types查询的解决scheme等)。 我最近遇到了一个需要设置SQL-LIMIT的问题。 经过大量的search,我仍然没有find解决scheme。 CriteriaQuery<Product> query = getEntityManager().getCriteriaBuilder().createQuery(Product.class); Root<Product> product = query.from(Product.class); query.select(product); return em.createQuery(query).getResultList(); 谁能帮我?

JPAhibernate多对多级联

我正在使用JPA 2.0和hibernate。 我有一个User类和一个Group类,如下所示: public class User implements Serializable { @Id @Column(name="USER_ID") private String userId; @ManyToMany @JoinTable(name = "USER_GROUP", joinColumns = { @JoinColumn(name = "GROUP_ID") }, inverseJoinColumns = { @JoinColumn(name = "USER_ID") } ) private Set<Group> groupList; //get set methods } public class Group { @Id @Column(name="GROUP_ID") private String groupId; @ManyToMany(mappedBy="groupList") private Set<User> memberList; //get set […]

从JPA注释的实体类自动生成数据模式

我正在使用JPA(Hibernate的实现)来注释实体类以坚持关系数据库(MySQL或SQL Server)。 有没有一种简单的方法来从注释类自动生成数据库模式(表创build脚本)? 我仍处于原型开发阶段,并预计会频繁更改模式。 我希望能够从注释的代码中指定和更改数据模型。 Grails类似于它从域类生成数据库。

您使用哪种Javatypes来进行JPA集合,为什么?

您在JPA域模型中使用以下哪种集合types,原因如下: java.util.Collection java.util.List java.util.Set 我想知道这是否有一些基本的规则。 更新我知道Set和List之间的区别。 List允许重复,并有一个顺序和一个Set不能包含重复的元素,并没有定义顺序。 我在JPA的背景下提出这个问题。 如果您严格遵循定义,那么您应始终使用Settypes,因为您的集合存储在关系数据库中,在那里您不能有重复项,并且您自己定义了一个顺序,即您的顺序Java List不一定保存在数据库中。 例如,大多数时候我使用Listtypes,不是因为它有一个顺序或允许重复(我不能有),因为我的组件库中的一些组件需要一个列表。

EntityManager.find()和EntityManger.getReference()有什么区别?

什么是区别 <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或得到引用?

FetchMode如何在Spring Data JPA中工作?

我在我的项目中有三个模型对象之间的关系(模型和存储库代码片尾) 当我打电话PlaceRepository.findById它会触发三个select查询: ( “SQL”) SELECT * FROM place p where id = arg SELECT * FROM user u where u.id = place.user.id SELECT * FROM city c LEFT OUTER JOIN state s on c.woj_id = s.id where c.id = place.city.id 这是非常不寻常的行为(对我来说)。 据我所知,在阅读Hibernate文档后,应该总是使用JOIN查询。 当FetchType.LAZY更改为Place类中的FetchType.EAGER (具有附加SELECT的查询)时,查询在查询中没有区别,而当FetchType.LAZY更改为FetchType.EAGER (JOIN查询)时, City类也相同。 当我使用CityRepository.findById抑制两个select: SELECT * FROM city c where id = […]