Questions tagged «jpa»

Java Persistence API(JPA)是Java规范,用于访问,持久化和管理Java对象/类与关系数据库之间的数据。它是EJB 3.0规范的一部分,并且是对象到关系映射(ORM)的行业标准方法。

20
JPA getSingleResult()或为null
我有一个在不存在时insertOrUpdate插入Entity或在存在时更新的方法。要启用此功能,我必须执行findByIdAndForeignKey,如果返回的话则返回nullinsert,然后更新。问题是如何检查它是否存在?所以我尝试了getSingleResult。但是,如果 public Profile findByUserNameAndPropertyName(String userName, String propertyName) { String namedQuery = Profile.class.getSimpleName() + ".findByUserNameAndPropertyName"; Query query = entityManager.createNamedQuery(namedQuery); query.setParameter("name", userName); query.setParameter("propName", propertyName); Object result = query.getSingleResult(); if (result == null) return null; return (Profile) result; } 但是getSingleResult抛出一个Exception。 谢谢
136 java  jpa 

3
@ManyToOne属性上不允许使用@Column
我有一个JPA实体,其属性设置为 @ManyToOne @Column(name="LicenseeFK") private Licensee licensee; 但是,当我在JBoss 6上进行部署时,该应用程序将引发错误消息: org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property 我使用Hibernate 3.5作为JPA 2.0实现。 我应该使用什么来引用外键列?

8
如何测试Spring Data存储库?
我想要UserRepository借助Spring Data创建的存储库(例如)。我是spring-data的新手(但不是spring),并且使用了本教程。我选择的用于处理数据库的技术是JPA 2.1和Hibernate。问题是我对如何为这样的存储库编写单元测试一无所知。 让我们以create()方法为例。当我首先进行测试时,应该为它编写一个单元测试-这就是我遇到的三个问题: 首先,我如何将an的模拟注入接口EntityManager的不存在的实现中UserRepository?Spring Data将基于此接口生成一个实现: public interface UserRepository extends CrudRepository<User, Long> {} 但是,我不知道如何强制它使用EntityManager模拟和其他模拟-如果我自己编写实现,则可能会有一个setter方法EntityManager,允许我将模拟用于单元测试。(对于实际的数据库连接性,我有一个JpaConfiguration类,用@Configuration和注释,该类以@EnableJpaRepositories编程方式定义了,等等的Bean DataSource,但是存储库应该易于测试,并且可以覆盖这些内容)。EntityManagerFactoryEntityManager 其次,我应该测试互动吗?我很难弄清楚应该调用EntityManager和的什么方法Query(类似于verify(entityManager).createNamedQuery(anyString()).getResultList();),因为编写实现的不是我。 第三,首先我应该对Spring-Data生成的方法进行单元测试吗?据我所知,第三方库代码不应该进行单元测试-只有开发人员自己编写的代码才应该进行单元测试。但是,如果这是真的,但它仍然带来的第一个问题回到场景:比方说,我有一对夫妇的自定义方法为我的仓库,为此,我会写的实现,我怎么注入我的嘲笑EntityManager,并Query进入决赛,产生仓库? 注:我将使用测试驱动我的仓库都集成和单元测试。对于我的集成测试,我使用的是HSQL内存数据库,而显然我没有使用数据库进行单元测试。 可能是第四个问题,在集成测试中测试正确的对象图创建和对象图检索是否正确(例如,我使用Hibernate定义了复杂的对象图)? 更新:今天我继续尝试模拟注入-我创建了一个静态内部类来允许模拟注入。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @Transactional @TransactionConfiguration(defaultRollback = true) public class UserRepositoryTest { @Configuration @EnableJpaRepositories(basePackages = "com.anything.repository") static class TestConfiguration { @Bean public EntityManagerFactory entityManagerFactory() { return mock(EntityManagerFactory.class); } @Bean public EntityManager entityManager() …

4
单向和双向JPA和Hibernate关联之间有什么区别?
单向和双向关联有什么区别? 由于在db中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。 这是单向关联 public class User { private int id; private String name; @ManyToOne @JoinColumn( name = "groupId") private Group group; } public class Group { private int id; private String name; } 双向关联 public class User { private int id; private String name; @ManyToOne @JoinColumn( name = "groupId") private …


11
JPA CascadeType.ALL不会删除孤儿
我在使用带有以下映射的JPA删除孤立节点时遇到问题 @OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner") private List<Bikes> bikes; 我遇到了孤立角色挂在数据库周围的问题。 我可以使用org.hibernate.annotations.Cascade特定于注释的Hibernate标记,但是显然我不想将解决方案绑定到Hibernate实现中。 编辑:似乎JPA 2.0将包括对此的支持。
132 java  hibernate  orm  jpa  jpa-2.0 


11
使用JPA的Kotlin:默认构造函数地狱
根据JPA的要求,@Entity类应具有默认的(非arg)构造函数,以在从数据库中检索对象时实例化这些对象。 在Kotlin中,可以很方便地在主构造函数中声明属性,如以下示例所示: class Person(val name: String, val age: Int) { /* ... */ } 但是,当将非arg构造函数声明为辅助构造函数时,它要求传递主要构造函数的值,因此需要一些有效值,例如: @Entity class Person(val name: String, val age: Int) { private constructor(): this("", 0) } 在情况下,当性能有一些更复杂的类型不只是String和Int他们是不可为空的,它看起来完全坏为他们提供价值,尤其是当有在主构造和太多的代码init块,当正在积极使用的参数- -当通过反射重新分配它们时,大多数代码将再次执行。 此外,val在构造函数执行后无法重新分配-properties,因此也失去了不变性。 所以问题是:如何在不进行代码重复,选择“魔术”初始值和丧失不变性的情况下使Kotlin代码适用于JPA? PS是真的,除了JPA之外,Hibernate可以使用默认构造函数构造对象吗?

3
用多余的列映射多对多关联表
我的数据库包含3个表:User和Service实体具有多对多关系,并按如下所示与SERVICE_USER表联接: 用户-SERVICE_USER-服务 SERVICE_USER表包含附加的BLOCKED列。 执行这种映射的最佳方法是什么?这些是我的实体类 @Entity @Table(name = "USERS") public class User implements java.io.Serializable { private String userid; private String email; @Id @Column(name = "USERID", unique = true, nullable = false,) public String getUserid() { return this.userid; } .... some get/set methods } @Entity @Table(name = "SERVICES") public class CmsService implements …

26
休眠:“字段'id'没有默认值”
我面临的问题是Hibernate的一个简单问题,但无法解决(无法访问的Hibernate论坛当然无济于事)。 我有一个简单的课程想继续学习,但是请继续学习: SEVERE: Field 'id' doesn't have a default value Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) [ a bunch more ] Caused by: java.sql.SQLException: Field 'id' doesn't have a default value [ a bunch more ] 持久化类的相关代码为: package hibtest.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; …

3
对于大型项目,Spring Data JPA与Hibernate有何不同?
我很难决定是应该坚持使用Hibernate进行新项目,还是选择JPA和新的Spring Data实现。 Spring Data框架适用于查询需求适中的大型项目还是小型项目? 虽然我当然看到了通过使用@Query注释在代码减少方面的优势,但是您对动态查询做了什么?当您要实现一个非常复杂的save()方法时该怎么办? 该文档说要创建您的主要存储库实现的Custom接口和实现,但是如果您需要访问Crud存储库本身的任何超级方法怎么办?Crud存储库实现了自定义方式-并非相反。这似乎是一个奇怪的设计。 我不确定该框架是否能够应对复杂和大型应用程序的挑战。我从来没有遇到过Hibernate的很多问题,并且我正在考虑坚持使用旧的可靠工具,而不是使用Spring Data JPA。 我该怎么办?如果使用Spring Data JPA,我会遇到哪些无法预见的复杂性和成本?

2
ORM映射中的“拥有方”是什么?
拥有方到底是什么意思?一些映射示例(一对多,一对一,多对一)的解释是什么? 以下文本摘自Java EE 6文档中@OneToOne的描述。您可以在其中看到概念拥有方面。 定义与具有一对一多重性的另一个实体的单值关联。通常不必显式指定关联的目标实体,因为通常可以从被引用对象的类型中推断出该目标实体。如果关系是双向的,则非拥有方必须使用OneToOne批注中的mappingBy元素来指定拥有方的关系字段或属性。
128 java  hibernate  orm  jpa  mapping 



8
setMaxResults用于Spring-Data-JPA注释?
我正在尝试将Spring-Data-JPA合并到我的项目中。使我困惑的一件事是如何通过注释实现setMaxResults(n)? 例如,我的代码: public interface UserRepository extends CrudRepository<User , Long> { @Query(value="From User u where u.otherObj = ?1 ") public User findByOhterObj(OtherObj otherObj); } 我只需one (and only one)要从otherObj 返回User,但找不到任何方法来注释maxResults。有人可以给我一个提示吗? (mysql抱怨: com.mysql.jdbc.JDBC4PreparedStatement@5add5415: select user0_.id as id100_, user0_.created as created100_ from User user0_ where user0_.id=2 limit ** NOT SPECIFIED ** WARN util.JDBCExceptionReporter - …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.