Tag: jpa

应该嵌入jpa类实现equals和hashCode吗?

假设我有以下情况: @Entity public class Person { @Id private Long id; //Surrogate key @Embedded private Name name; //Natural key public int hashCode() { … //based on natural key Name } public boolean equals(Object obj) { … //based on natural key Name } } @Embeddable public class Name { private String firstName; private String middleName; private String […]

使用join更新值

使用Hibernate,我想根据条件更新数据库中的数据,但是我收到以下错误:“遍历的节点不能为null” 这是我的数据库描述: Account: id, email, password Member : id, account, team Team: id, current (and a reference to member => members) 这是我的JPA: UPDATE Team t SET t.current = :current LEFT JOIN t.members m WHERE t.current = :current_true AND m.account = :account 我究竟做错了什么? 如果我将LEFT JOIN移动到SET之前: UPDATE Team t LEFT JOIN t.members m SET t.current = :current […]

JPA EntityGraph使用Spring的不同视图

我有一个Spring应用程序。 登录后,我正在调用getUserByEmail()方法。 我只需要用户和角色数据。 基于角色我将显示不同的视图,每个视图具有不同的数据并且需要User的不同子实体。 好像我必须使用不同的子实体调用getUserByEmail()。 这是涉及实体的部分代码: EntityGraph(value = “withAddresses”, type = EntityGraphType.FETCH) public class User{ public firstName; public lastName; @OneToMany(fetch = FetchType.LAZY) public List addresses @OneToMany(fetch = FetchType.LAZY) public List orders; } public userRepository extend jPaRepository(User.class,Long){ @EntityGraph(name=”withAdresses”) getUserByEmail(String email) /* if possible */ @EntityGraph(name=”withOrder”) getUserByEmail(String email) } 是否可以有两个具有相同查询名称的User对象图? 因为我需要不同视图的不同数据。 此外,当切换到新视图(弹簧控制器中的新调用)时,先前视图中的事务将被关闭,我必须进行新调用以与用户具有不同的数据。 我不明白如果你不在同一个事务服务方法中,fetch lazy是多么有用,除非我没有遗漏一些东西。 例如,如果我在“orderWiew.html”中需要订单数据,则延迟加载订单不会有帮助我必须再次调用相同的用户数据和其他订单数据

将JPA与Hibernate实现一起使用:entityManager.remove – 不工作

我使用JPA而不是Hibernate 4.1.4.Final实现。 我的问题是我无法让EntityManager#remove()工作。 所有其他:更新,插入,选择操作正常工作,除了这一个。 我的persistence.xml文件: org.hibernate.ejb.HibernatePersistence core.entity.Answer core.entity.BaseEntity true NONE 我的Answer实体:( BaseEntity类只保存主键 – ID) @Entity @Table(name = “ANSWER”) @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Answer extends BaseEntity { @Column(name = “ANSWER_VALUE”) private String answerValue; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = “QUESTION_ID”, nullable = false) private Question question; //overrided equals, hascode, toString // all getters and setters } […]

Spring Data REST – @PrePersist和@HandleBeforeCreate之间的区别?

我在JPA映射上使用Spring Data Rest 。 JPA为在DB中实体的持久性之前调用的方法提供@PrePersist注释。 Spring Data Rest为捕获实体创建事件时要调用的方法提供@HandleBeforeCreate注释。 这似乎与我相当。 我何时应该使用另一个?何时应该使用另一个?

使用JPA进行历史跟踪

我希望通过使用新表来存储日志,以及用于进行更改的用户,日期以及每次更新/插入中更改的内容,来实现我的某个模型实体的历史记录跟踪/审核。 我正在使用EclipseLink作为我的JPA提供程序,但我不想使用其历史记录策略,因为提供程序将来可能会更改。 出于同样的原因,我不能使用Hibernate Envers 。 我查看了Spring Data提供的审计支持 ,但它看起来非常基础,它只允许您存储创建或修改实体的用户和日期,而不是更改。 我也知道JPA的prePersist和preUpdate ,但具体说明: 通常,可移植应用程序的生命周期方法不应调用EntityManager或Query操作,访问其他实体实例或修改同一持久性上下文中的关系。 是否有一个干净,简单和便携的方式来实现这一点?

Hibernate加载一个懒惰的代理,但我只需要PK

我有这些实体: @Entity public class Room { @ManyToOne(optional=true,fetch=FetchType.LAZY) private Player player1; … } @Entity public class Player { @Id @Column(updatable=false) private long id; public long getId() { return id; } … } 现在,这个声明在Room … player1.getId(); …将导致从数据库中获取整个Player实体。 但是,我只需要它的主键id ,它应该已经拥有(否则它如何获取数据?)。 如何在不触发数据库访问的情况下访问惰性Player代理的id ?

Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final + JPA Repository

尝试使用Spring JPA时出现此错误: 无法打开JPA EntityManager进行交易; 嵌套exception是java.lang.NoSuchMethodError:org.hibernate.Session.getFlushMode()Lorg / hibernate / FlushMode; **更新:完整堆栈跟踪 它在不同的项目中使用相同的配置 可能是什么原因? 我正在使用Java 1.8和动态Web应用程序3.1(作为可行的并行项目) pom.xml中: 4.0.0 Test Test 0.0.1-SNAPSHOT war src org.apache.maven.plugins maven-compiler-plugin 3.5.1 1.8 1.8 -Xlint:all true true WebContent\WEB-INF\web.xml false org.codehaus.mojo exec-maven-plugin 1.2.1 org.test.int1.Main org.springframework spring-context 4.3.0.RELEASE commons-logging commons-logging org.springframework spring-webmvc 4.3.0.RELEASE org.springframework spring-tx 4.3.0.RELEASE org.springframework spring-web 4.3.0.RELEASE org.springframework.data spring-data-jpa 1.10.2.RELEASE org.springframework.security spring-security-config 4.1.0.RELEASE […]

带有DynamoDB和MySQL双数据源的Spring Data / JPA存储库

我熟悉如何使Spring通过多个持久性单元和多个entityManagerFactoryBean实现动态处理多个数据源,但我正在努力的是如何在相同的弹簧配置中通过spring实现MySQL方言和 DynamoDB方言 -配置xml文件。 工作模式如下: [来自某个端点的数据POJO] – >将POJO保留到DynamoDB中,检索该对象的UUID(业务键作为POJO上的字段) – >将UUID作为复合键(没有参照完整性,它只是另一列)保留到MySQL中数据库[与其他相关的映射实体]。 我正在努力解决将DynamoDB实例添加到Spring配置文件中以实现此目的的方法。 对于它的价值,相关的存储库将在不同的包中。 任何10人的先发都会感激不尽! 我已经做了一些搜索,但所有的DynamoDB映射器框架似乎都处于更高的水平 – 我错过了什么吗? 我一直在关注Spring-Data DynamoDB,但仍然无法在配置文件和Dynamo之间建立链接。 提前致谢, 一个。 =========思考更新========= 我想我已经走错了路。 从更多地挖掘样本,进行本地集成测试[pure dynamodb],我认为不可能将DynamoDB用作EntityManager Factory实现的一部分:为此,我认为我将不得不“创建”我自己的存储库实现,它为Dynamo调用mapper和AWS连接助手类等,而不是使用任何JPA spring提供的代码。 除非有人能推荐/暗示否则?

如何避免创建多余的实体?

在我当前的项目中,我需要执行一些本机查询,从查询中加入的表中选择一些字段,例如: SELECT t1.col1, t2.col5 FROM t1 JOIN t2 ON t2.id = t1.t2_id 我试着将它们存放在类似的类中 class Result { String t1_col1; String t2_col5; } 运用 Query q = entityManager.createNativeQuery( “THE SQL SELECT” , Result.class ); JPA现在抱怨(“未知实体:结果”)类“结果”不是可能需要将列映射到对象的实体。 我还尝试在结果类中重复@Column声明。 我的问题是如何声明这一点而不必在我的数据库中创建表示为表格的entites?