Tag: jpa

使用JPA / EJB3批量插入

JPA / EJB3框架是否提供了批量插入操作的标准方法……? 我们使用hibernate作为持久性框架,所以我可以回退到Hibernate Session并使用组合session.save()/ session.flush()实现批量插入。 但是想知道EJB3是否支持这个……

带有Hibernate 4和ManyToOne级联的IllegalStateException

我有两个class MyItem对象: @Entity public class MyItem implements Serializable { @Id private Integer id; @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) private Component defaultComponent; @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) private Component masterComponent; //default constructor, getter, setter, equals and hashCode } 组件对象: @Entity public class Component implements Serializable { @Id private String name; //again, default constructor, getter, setter, equals and hashCode […]

如何持久化@ManyToMany关系 – 重复条目或分离实体

我想用ManyToMany关系来保持我的实体。 但是在持久化过程中我遇到了一些问题。 我的实体: @Entity @Table(name = “USER”) public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = “ID”) @GeneratedValue(strategy = GenerationType.IDENTITY) Long userId; @Column(name = “NAME”, unique = true, nullable = false) String userName; @Column(name = “FORNAME”) String userForname; @Column(name = “EMAIL”) String userEmail; @ManyToMany(cascade = CascadeType.ALL, fetch = […]

Configuration.generateSchemaCreationScript()在Hibernate 5中的位置

在Hibernate 4.x中,我习惯于生成和导出注释实体中定义的模式,如下所示(使用Spring在类路径上查找带注释的实体): Connection connection = DriverManager.getConnection(“jdbc:h2:mem:jooq-meta-extensions”, “sa”, “”); Configuration configuration = new Configuration() .setProperty(“hibernate.dialect”, “org.hibernate.dialect.H2Dialect”); // […] adding annotated classes to Configuration here… configuration.generateSchemaCreationScript( Dialect.getDialect(configuration.getProperties())); SchemaExport export = new SchemaExport(configuration, connection); export.create(true, true); 这在Hibernate 5.0中不再有效: Configuration.generateSchemaCreationScript()不再存在 现在不推荐使用SchemaExport(configuration, connection)构造函数 除了以下内容之外,我没有在迁移指南中找到任何明显的引用变化: 已从配置中删除了相当多的方法 基于一组带注释的实体,使用Hibernate 5.0在现有JDBC连接上生成和导出数据库的正确方法是什么? (基于JPA的纯解决方案也很好) (注意,只是删除对generateSchemaCreationScript()的调用似乎可以工作,但我更希望确保这一点正确)

IllegalArgumentException:必须至少存在一个JPA元模型

从春季rest开始,我得到了以下错误 org.springframework.beans.factory.BeanCreationException:创建名为’jpaMappingContext’的bean时出错:init方法的调用失败; 嵌套exception是java.lang.IllegalArgumentException:必须至少存在一个JPA元模型! 在org.springframework上的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1595)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]。 org.springframework.beans.factory.support上的beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:566)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject中的.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] (AbstractBeanFactory.java:304)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java: 230)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]在org.springframework.beans.factory.suppo orrt.springframework.beans.factory.support.AbstractBeanFactory.getBean中的rt.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] (AbstractBeanFactory.java:195)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]在org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java: 725)〜[spring-beans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)〜[spring-context在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)〜[spring-context-5.0.0.BUILD- SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]在org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)〜[spring-boot-2.0 or.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]在org.springframework.boot.SpringApplication.refresh(SpringApplication.java:736)[spring-boot-2.0.0.BUILD-SNAPSHOT.jar:2.0 .O.BUILD-SNAPSHOT] org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369)[spring-boot-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]在org。 springframework.boot.SpringApplication.run(SpringApplication.java:313)[spring-boot-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]在org.springframework.boot.SpringApplication.run(SpringApplication。 java:1161)[spring-boot-2.0.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT]在org.springframework.boot.SpringApplication.run(SpringApplication.java:1150)[spring-boot-2.0 com.java.app.QuickPollApplication.main中的.0.BUILD-SNAPSHOT.jar:2.0.0.BUILD-SNAPSHOT] [classes /:na]引起:java.lang.IllegalArgumentException:At必须至少有一个JPA元模型! org.springframework.util.Assert.notEmpty(Assert.java:438)〜[spring-core-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] org.springframework.data.jpa。 mapping.JpaMetamodelMappingContext。(JpaMetamodelMappingContext.java:52)〜[spring-data-jpa-1.11.0.BUILD-SNAPSHOT.jar:na] at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean。 java:71)〜[spring-data-jpa-1.11.0.BUILD-SNAPSHOT.jar:na] at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:26)〜[spring -data-jpa-1.11.0.BUILD-SNAPSHOT.jar:na] at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:134)〜[spring-beans-5.0.0.BUILD- SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1654)〜[spring-be ans-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1591)〜[spring-beans-5.0.0 .BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT] …省略了16个常用帧 使用以下代码 @SpringBootApplication @RestController public class QuickPollApplication { public static void main(String[] args) { SpringApplication.run(QuickPollApplication.class, args); } @RequestMapping(value = […]

Hibernate使用orphanRemoval触发约束违规

我在使用JPA / Hibernate(3.5.3)设置时遇到问题,我有一个实体,一个“帐户”类,它有一个子实体列表,“联系”实例。 我正在尝试将Account的实例添加/删除到Account的List 属性中。 将新实例添加到集合中并调用saveOrUpdate(account)可以保持一切可爱。 如果我然后选择从列表中删除联系人并再次调用saveOrUpdate,则SQL Hibernate似乎会产生涉及将account_id列设置为null,这违反了数据库约束。 我究竟做错了什么? 下面的代码显然是一个简化的摘要,但我认为它涵盖了问题,因为我在不同的代码中看到相同的结果,这真的是这个简单。 SQL: CREATE TABLE account ( INT account_id ); CREATE TABLE contact ( INT contact_id, INT account_id REFERENCES account (account_id) ); Java的: @Entity class Account { @Id @Column public Long id; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name = “account_id”) public List contacts; } @Entity class […]

MappedSuperclass – 在子类中更改SequenceGenerator

我正在使用JPA2和Hibernate,并尝试为我的实体引入一个公共基类。 到目前为止看起来像这样: @MappedSuperclass public abstract class BaseEntity { @Id private Long id; @Override public int hashCode() { // … } @Override public boolean equals(Object obj) { // … } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } } 但是,对于每个表都有一个序列$entityname_seq ,我想用它作为我的序列生成器。 如何从我的子类中设置它? 我想我需要覆盖@GeneratedValue并使用@SequenceGenerator创建一个新的SequenceGenerator。

JPA(Hibernate)和自定义表前缀

是否可以覆盖JPA / Hibernate中的表名,以便为所有项目实体添加公共前缀? 例如,能够通过“JBPM5_”前缀为所有JBPM 5表添加前缀。 接受答案的示例: public class JBPM5NamingStrategy extends ImprovedNamingStrategy { public String classToTableName(String className) { return StringHelper.unqualify(className); } public String propertyToColumnName(String propertyName) { return propertyName; } public String tableName(String tableName) { return “JBPM5_” + tableName; } public String columnName(String columnName) { return columnName; } public String propertyToTableName(String className, String propertyName) { return “JBPM5_” […]

具有分页的Spring-Data FETCH JOIN不起作用

我正在尝试使用HQL使用JOIN FETCH获取我的实体和子实体,如果我想要所有结果,这可以正常工作但如果我想要一个页面则不是这样 我的实体是 @Entity @Data public class VisitEntity { @Id @Audited private long id; . . . @OneToMany(cascade = CascadeType.ALL,) private List comments; } 因为我有数百万次访问,我需要使用Pageable,我想在单个数据库查询中获取注释,如: @Query(“SELECT v FROM VisitEntity v LEFT JOIN FETCH v.comments WHERE v.venue.id = :venueId and …” ) public Page getVenueVisits(@Param(“venueId”) long venueId,…, Pageable pageable); 该HQL调用抛出以下exception: Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified […]

动态更改持久性单元 – JPA

persistence.xml中的持久性单元是在构建应用程序期间创建的。 由于我想在运行时更改数据库URL,有没有办法在运行时修改持久性单元? 我应该在分发后使用除预绑定之外的不同数据库。 我正在使用EclipseLink(JPA 2.1)