Tag: jpa

使用@PreUpdate的问题

我有以下课程: @MappedSuperclass public abstract class MappedModel { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “id”, nullable = false, unique = true) private Long mId; @Temporal(TemporalType.TIMESTAMP) @Column(name = “rec_created_dtm”, nullable = false, updatable = false) private Date recordCreatedDTM; @Column(name = “rec_cre_user_id”, nullable = true, updatable = false) private Long recordCreatedUserId; @Temporal(TemporalType.TIMESTAMP) @Column(name = “last_update_dtm”, nullable = false) […]

如何在JPA中按count()订购

我正在使用这个JPA-Query: SELECT DISTINCT e.label FROM Entity e GROUP BY e.label ORDER BY COUNT(e.label) DESC 我没有得到任何错误,结果几乎是正确的,但是有些值是错误的(要么翻转两个值,要么将一些值完全错位) 编辑: 将COUNT(e.label)添加到我的SELECT子句可以解决此查询的此问题。 但是在类似的查询中也包含WHERE子句,问题仍然存在: SELECT DISTINCT e.label, COUNT(e.label) FROM Entity e WHERE TYPE(e.cat) = :category GROUP BY e.label ORDER BY COUNT(e.label) DESC

将DTO转换为实体,反之亦然

我在我的Web应用程序中使用Spring MVC架构和JPA 。 在哪里手动将DTO转换为实体,反之亦然(不使用任何框架)?

Spring Data JPA存储库:派生查询中的IN子句不起作用

我有一个看起来像这样的存储库: public interface UserRepository extends JpaRepository { User findByEmailIgnoreCase(String email); @Query(“select u from User u where u.id in (:ids)”) Set getByIdInSet(@Param(“ids”) Set ids); } 当我调用getByIdInSet我收到以下错误: Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class org.eclipse.persistence.indirection.IndirectSet for parameter ids with expected type of class java.lang.Long from query string select u from User […]

JPA + Hibernate + EHCache,出乎意料的行为

我正在尝试将EHCache实现到我的工作原型中,其中我有一个javax.persistence.Entity表示我的数据库上的表(MySQL,mysql-connector-java-5.1.20.jar),它作为XML提供给消费者。 我面临的问题是, 即使EHCache将查询结果存储在内存中 ,Hibernate仍然会从数据库中检索数据。 我正在使用EHCache监视器查看内存中的项目数,并在缓存过期之前直接在数据库上更改数据,以了解是否实际使用了缓存数据。 我一直在寻找这个问题的复制而没有成功,所以也许我错过了一些东西(我只是想进入java世界)。 我的文件 的pom.xml org.hibernate hibernate-validator 4.3.0.Final org.hibernate hibernate-entitymanager 4.1.4.Final org.hibernate hibernate-ehcache 4.1.4.Final net.sf.ehcache ehcache-core 2.5.2 org.terracotta ehcache-probe 1.0.2 实体类 package myPrototype.entities import javax.persistence.Cacheable; import javax.persistence.Entity; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.xml.bind.annotation.XmlRootElement; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @Entity @Cacheable @Cache(usage=CacheConcurrencyStrategy.READ_ONLY) @Table(name = “Cars”) @XmlRootElement @NamedQueries({ @NamedQuery(name = “Cars.findAll”, query = […]

使用Hibernate使用瞬态对象更新持久对象

每天,数据通过Web服务导入。 我创建了一个pojo的新(瞬态)实例 ,我通过JPA注释在hibernate中映射。 我将Web服务中的数据填充到瞬态实例中 我从我想要使用瞬态实例中的数据更新的数据库中加载持久对象。 我以某种方式将这个瞬态实例与持久实例合并。 如果持久对象在其中一个字段上具有非空值,则它不会被瞬态对象上的潜在空值覆盖。 基本上我不想丢失任何数据,只是更新事情的变化。 我知道我可以浏览pojos上的所有字段,并检查空值,并在适当的地方更新,但我更愿意让hibernate执行此操作,如果它能够,因为它会减少我添加字段和忘记将其添加到此手动合并过程中。 hibernate可以执行上面的第4步吗?

在Spring Boot中获取EntityManager的句柄

有没有办法获得给定实体对象的EntityManager句柄? 我正在使用带有JPA启动器的spring boot 1.2.3,我还使用@configuration显式配置了多个数据源 我已经检查了[已解决] SPRING BOOT对entityManager的访问权限 ,它似乎没有回答这个问题。 谢谢。 编辑:我添加了如何定义数据源的说明: @Component @Configuration public class DataSources { @Bean @Primary @ConfigurationProperties(prefix=”first.datasource”) public DataSource getPrimaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix=”second.datasource”) public DataSource getSecondDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix=”third.final.datasource”) public DataSource getThirdFinalDataSource() { return DataSourceBuilder.create().build(); } } 在我的application.yml中,我有以下部分 first.datasource: name: ‘first_datasource’, #other attributes… second.datasource: name: ‘second_datasource’, #other […]

如何在jpa侦听器中获取实体管理器或事务

我正在使用像PostDeleteEventListener, PostInsertEventListener, PostUpdateEventListener这样的Hibernate事件监听PostDeleteEventListener, PostInsertEventListener, PostUpdateEventListener来执行插入,删除和更新期间的一些操作。 现在我想使用JPA监听器来执行此操作,因为如果我想从Hibernate转移到任何其他JPA提供程序,我的监听器应该工作。 Hibernate监听器为我提供了event ,我可以从中获取事务并检查其是否已提交或回滚。 JPA监听器只为我提供实体对象。 现在我如何在JPA监听器中获取事务或会话或实体管理器? 提前致谢!! 我使用Jboss作为我的CMT。

如何在Hibernate中持久化非实体子类中的实体

我试图将实体扩展为非实体,用于填充超类的字段。 问题是,当我尝试保存它时,Hibernate会抛出MappingException。 这是因为即使我将ReportParser强制转换为Report,运行时实例仍然是ReportParser,因此Hibernate抱怨它是一个未知实体。 @Entity @Table(name = “TB_Reports”) public class Report { Long id; String name; String value; @Id @GeneratedValue @Column(name = “cReportID”) public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } @Column(name = “cCompanyName”) public String getname() { return this.name; } public void setName(String name) { this.name = […]

将Hibernate实体映射为未知的DiscriminatorValue for InheritanceType.SINGLE_TABLE

我有一个经典的Hibernate @Inheritance(strategy=InheritanceType.SINGLE_TABLE)和@DiscriminatorFormula 。 它工作正常。 但是,数据库中的@DiscriminatorValue大约有500个不同的值,我需要将其中大约30个映射到Java类(子级),其余的映射到父级Java类。 可以将该问题建模为Animal类的示例inheritance。 @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorFormula(“…”) public class Animal implements Serializable { … @Column public String getName() { … } } 所以我在Java代码中使用@DiscriminatorValue定义了大约30个Animal的子类。 当Hibernate为鉴别器找到未知值时,它会抛出WrongClassException 。 但是,我需要将这些未知的鉴别器值映射到一个实体,最好是Animal类。 (在这种情况下我只需要使用方法getName()。) 我知道一个解决方案是将一个SQL CASE放入@DiscriminatorFormula但是我必须在那里声明所有30个已知的鉴别器值(当我需要添加其他值时加上更多)。 所以我正在寻找更灵活的解决方案。 PS这是遗留代码,因此我无法更改模型。