草庐IT

java - 如何在 JPA/Spring-Data JPA 中使用审计?

我在项目中使用JPA和Spring-DataJPA。我有一张表,其中我插入然后更新数据。但是我需要审计信息来保存所有对象的状态,即我需要插入的状态信息和另一个表中的所有后续更新。我知道我可以在数据库中使用触发器来做到这一点。但是,这可以使用JPA/SpringDataJPA来完成吗?如有任何帮助,我们将不胜感激。 最佳答案 JPA规范(section3.5)定义了生命周期回调方法:prePersistpostPersist预删除删除后预更新发布更新加载后这可能是您在纯JPA中所能找到的最接近的东西。SpringData本身具有进一步

java - JPA - 来自 hibernate 的 LobCreator 模拟?

在纯Hibernate中我可以做到:Blobblob=Hibernate.getLobCreator(sessionFactory.getCurrentSession()).createBlob(inputStream,len);如何在jpa中执行此操作(使用hibernate作为提供程序)?在纯hibernate中,我为blob创建了用户类型,它使用了setBinaryStream准备语句。这个解决方案非常适合我,我正在寻找一种方法将它移植到JPA。 最佳答案 您可以在持久属性(AnnotationLob)上使用@Lob注释:@E

java - Flyway 和 JPA 集成

我当前的Spring3.0项目正在与Flyway集成。感谢谷歌网站,所以我可以依靠这些文档。但不幸的是,关于与JPA集成的讨论并不多。所以问题是:如何将Flyway与persistence.xml整合?它是如何工作的?每次JPA提供程序都会自动生成架构更新,那么我们如何在此之前或之后运行脚本?我猜到目前为止flyway的查询不支持HQL,所以是否有任何示例代码可以让我了解如何集成迁移事件?设计一个拦截器还是一个新的切面?在域层面做什么?感谢任何提示。提前致谢。 最佳答案 Flyway不支持JPA和Spring。它基本上按顺序运行您的

java - 将 java BitSet 保存到数据库

使用JPA,我当然希望能够将BitSet保存到数据库并拉回。假设我有:@Entity@Table(name="myTable")publicclassMyClass{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="Object_Id")protectedlongid;@Column(name="Tags")protectedBitSettags;...getters&settersetc...}我是否也应该定义一个“columnDefinition”?我真的不明白它是如何持久化的(使用toString(

java - JPA Cascade注解和Hibernate Cascade注解的区别

我正在尝试使用Hibernate注释。当我尝试使用级联时,我在Eclipseintellisense中得到两个选项:javax.persistence.CascadeTypeandorg.hibernate.annotations.CascadeType在hibernateCascadeType中,提供了比JPA中更多的选项。有什么优势吗? 最佳答案 javax.persistence注释是标准规范。hibernate注解代表了Hibernate的具体实现。它们大多重叠,但HibernateCascadeType提供了一些特定于Hi

java - 生成的序列以 1 开头,而不是在注释中设置的 1000

我想寻求一些关于Hibernate创建的数据库序列的帮助。我的实体类中有此注释-下面的代码,以便为合作伙伴表提供单独的序列。我希望序列从1000开始,因为我在部署期间使用import.sql将测试数据插入到我的数据库中,我想避免违反约束。但是当我想要保留数据时,我得到了违反约束的异常,它告诉我partner_id=2已经存在的事实。看来我错过了什么。@Id@Column(name="partner_id")@SequenceGenerator(initialValue=1000,allocationSize=1,name="partner_sequence",sequenceName=

java - 写入数据库时​​错误的 UTF-8 编码(读取正常)

我在使用JSF和EclipseLinkJPA到MySQL数据库的Web应用程序中遇到了很大的问题。当我从数据库读取数据时,JSF以UTF-8OK读取和写入我的字符。但在数据库中字符是坏的。f.e.:输入字符:“żźćółzxcv”,写入数据库:“??????zxcv”。但是,如果我手动将数据写入数据库,例如:“żźćółzxcv”,那么在JSF中读取是完美的。我从这里尝试了一切:UnicodeinputretrievedviaPrimeFacesinputcomponentsbecomecorrupted然后我发现用JSF编码没问题,但问题出在java,因为如果我手动设置current

java - @PostPersist 未调用...@PrePersist 是...为什么?

我有一个JPA@Entity类,它使用@PrePersist已经有一段时间了。今天我想在需要该实体ID的地方添加一些功能。此ID由数据库中的HIBERNATE_SEQUENCE持久化期间生成。它通常在em.persist(entity)之后设置。由于某些未知原因,@PrePersist方法被触发...而@PostPersist根本不会触发:@EntitypublicclassMyEntity{@PrePersistprotectedvoidonCreate(){System.out.println("ExtendedEntity.onCreate()");}@PostPersistpr

java - 使用 CriteriaQuery API 的多态 JPA 查询

我有以下实体结构:+-----------++-------------+|User|------------->|Role|+-----------++-------------+^|+-------+---------+||+-----------++-----------++------------+|Role1||Role2|-------->|SomeEntity|+-----------++-----------++------------+我想获取其Role2具有具有特定属性值的SomeEntity的所有用户的名称。我需要使用JPA标准API来执行此操作。到目前为止我所做

java - 升级到 Hibernate 4.3.4 主要方法永远不会终止 JVM 未完成

我必须从Hibernate4.2.3升级到Hibernate4.3.4以测试一些JPA2.1规范。我只更改了这行代码上一行:finalorg.hibernate.service.ServiceRegistryserviceRegistry=neworg.hibernate.service.ServiceRegistryBuilder().applySettings(hibConfiguration.getProperties()).buildServiceRegistry();新添加的代码行finalorg.hibernate.service.ServiceRegistryservic