Questions tagged «jpa»

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

16
Spring Data JPA-“找不到类型的属性”异常
好吧,我搜索了Google并发现了很多结果,但是没有一个能够回答我的问题。所以,就到这里。 我正在尝试通过最少地实现pinterest克隆来研究Spring MVC和Spring Data JPA。因此,以下是我认为与我的问题相关的代码部分。 型号/实体 @Entity @Table(name = "pin_item") public class PinItem implements Serializable { // properties ... @JoinColumn(name = "board_id", referencedColumnName = "user_board_id") @ManyToOne(optional = false) private UserBoard board; // getters and setters... } @Entity @Table(name = "user_board") public class UserBoard implements Serializable { // properties ... @OneToMany(cascade …

1
spring.jpa.hibernate.ddl-auto属性在Spring中如何正常工作?
我当时在从事我的Spring Boot应用程序项目,并注意到,有时到另一个服务器(SQL Server)上的数据库存在连接超时错误。当我尝试执行一些脚本迁移时,这种情况会特别发生,FlyWay但在尝试几次后仍可以正常工作。 然后我注意到我没有spring.jpa.hibernate.ddl-auto在属性文件中指定 。我做了一些研究,发现建议增加 spring.jpa.hibernate.ddl-auto= create-drop开发。并将其更改为:spring.jpa.hibernate.ddl-auto= none生产中。 但是我实际上并不了解它实际上是如何工作的,以及休眠如何使用create-drop或none值生成数据库模式。您能否从技术上解释它是如何工作的,以及在开发和生产服务器上使用此属性的建议?谢谢

4
将IN子句列表添加到JPA查询
我建立了一个NamedQuery,看起来像这样: @NamedQuery(name = "EventLog.viewDatesInclude", query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND " + "el.timeMark <= :dateTo AND " + "el.name IN (:inclList)") 我想做的是用一个项目列表而不是一个项目填充参数:inclList。例如,如果我有一个方法,new List<String>() { "a", "b", "c" }如何在:inclList参数中得到它?它只允许我编入一个字符串。例如: setParameter("inclList", "a") // works setParameter("inclList", "a, b") // does not work setParameter("inclList", "'a', 'b'") // does …
124 java  jpa  jpql 

9
Spring Boot + JPA:列名注释被忽略
我有一个带有依赖项的Spring Boot应用程序spring-boot-starter-data-jpa。我的实体类具有带有列名称的列注释。例如: @Column(name="TestName") private String testName; 由此生成的SQL创建test_name为列名。在寻找解决方案之后,我发现spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy解决了该问题(列名来自列注释)。 我的问题仍然是,为什么不将naming_strategy设置为EJB3NamingStrategyJPA就会忽略列注释?也许休眠方言与此有关?我正在连接到MS SQL 2014 Express,我的日志包含: Unknown Microsoft SQL Server major version [12] using SQL Server 2000 dialect Using dialect: org.hibernate.dialect.SQLServerDialect



4
在JPA和Hibernate中,persist()和merge()之间有什么区别?
Hibernate中的persist()和merge()有什么区别? persist() 可以创建UPDATE&INSERT查询,例如: SessionFactory sef = cfg.buildSessionFactory(); Session session = sef.openSession(); A a=new A(); session.persist(a); a.setName("Mario"); session.flush(); 在这种情况下,将生成查询,如下所示: Hibernate: insert into A (NAME, ID) values (?, ?) Hibernate: update A set NAME=? where ID=? 因此persist()方法可以生成一个插入和一个更新。 现在merge(): SessionFactory sef = cfg.buildSessionFactory(); Session session = sef.openSession(); Singer singer = new Singer(); singer.setName("Luciano …
119 java  hibernate  jpa  orm  entity 

4
JPA或JDBC,它们有何不同?
我正在学习Java EE,并且下载了带有glassfish的日食。我看到了一些示例,还阅读了Oracle文档,以全面了解Java EE5。连接到数据库非常简单。我打开了一个动态Web项目,创建了一个会话EJB,我使用EntityManager并通过get方法可以访问存储的数据表。 对于我的下一个项目,我创建了一个简单的类,然后访问一些数据库表。我遇到的第一个问题是PersistenceUnit属性只能由EJB,Servlet等识别,而不是简单的Java类。因此,我无法使用EntityManager方式(或者可以吗?) 我被要求通过“ JDBC”方式进行操作。我遇到的第一个问题是获得与数据库的连接。似乎所有这些都必须经过硬编码。我有一个persistence.xml,可用来轻松配置数据库连接。甚至为数据库设置驱动程序都很容易。JDBC中也没有用于访问表实体的get / set方法。 我如何了解JPA和与JDBC相关的持久性?JPA的目的是什么?为什么会有set / get方法?有人可以阐明这两者的本质吗?没有“行话”的利弊是什么?还请提出一些链接。一个简单的Google搜索JPA和JDBC差异使我进入了一些无法理解的充满“术语”的网站:(
119 java  jpa  jdbc 

5
Java-JPA-@Version批注
@Version批注在JPA中如何工作? 我找到了各种答案,摘录如下: JPA使用实体中的版本字段来检测对同一数据存储记录的并发修改。当JPA运行时检测到尝试同时修改同一记录的尝试时,它将向尝试最后提交的事务抛出异常。 但是我仍然不确定它是如何工作的。 同样从以下几行开始: 您应该考虑版本字段是不变的。更改字段值会产生不确定的结果。 这是否意味着我们应该将version字段声明为final?

6
休眠,@ SequenceGenerator和allocationSize
我们都知道使用Hibernate时的默认行为@SequenceGenerator-它使实际数据库序列增加一,将该值乘以50(默认allocationSize值)-然后将该值用作实体ID。 这是错误的行为,并与说明以下内容的规范冲突: distributionSize-(可选)从序列中分配序列号时要增加的数量。 需要说明的是:我不关心生成的ID之间的差距。 我关心与基础数据库序列不一致的 ID 。例如:任何其他应用程序(例如,使用纯JDBC)可能要在从序列获得的ID下插入新行-但是所有这些值可能已被Hibernate使用!疯狂。 有人知道任何解决此问题的方法(没有设置allocationSize=1,从而降低性能)吗? 编辑: 弄清楚。如果最后插入的记录的ID = 1,则HB同时51, 52, 53...在其新实体BUT中使用值:数据库中序列的值将设置为2。当其他应用程序使用该序列时,很容易导致错误。 另一方面:规范说(据我所知)应该将数据库序列设置为51,同时HB应该使用范围内的值 2, 3 ... 50 更新: 正如下面的史蒂夫·埃伯索尔(Steve Ebersole)所述:我所描述的行为(也是许多人中最直观的行为)可以通过设置启用hibernate.id.new_generator_mappings=true。 感谢大家。 更新2: 对于将来的读者,您可以在下面找到一个有效的示例。 @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ") @SequenceGenerator(name = "USERS_SEQ", sequenceName = "SEQUENCE_USERS") private Long id; } …
117 java  hibernate  jpa  hilo 


27
创建在类路径资源中定义的名称为'entityManagerFactory'的bean时出错:初始化方法的调用失败
编译spring项目时,出现以下错误。 创建在类路径资源[org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaAutoConfiguration.class]中定义的名称为'entityManagerFactory'的bean时出错:调用init方法失败 我正在使用STS Eclipse和MySql数据库 我的连接字符串Application.Properties是 spring.datasource.url=jdbc:mysql://localhost:3306/stgdb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.hibernate.ddl-auto=update 详细错误如下 ================================================= 2016-10-15 15:34:38.875[0;39m [31mERROR[0;39m [35m3700[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.boot.SpringApplication [0;39m [2m:[0;39m Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: …

9
如何从Spring Data JPA GROUP BY查询返回自定义对象
我正在使用Spring Data JPA开发Spring Boot应用程序。我正在使用自定义JPQL查询来按某个字段分组并获取计数。以下是我的存储库方法。 @Query(value = "select count(v) as cnt, v.answer from Survey v group by v.answer") public List<?> findSurveyCount(); 它正在工作,结果如下: [ [1, "a1"], [2, "a2"] ] 我想得到这样的东西: [ { "cnt":1, "answer":"a1" }, { "cnt":2, "answer":"a2" } ] 我该如何实现?

15
JPA:对大型结果集进行迭代的正确模式是什么?
假设我有一个包含数百万行的表。使用JPA,迭代对该表的查询的正确方法是什么,这样我就不会拥有一个包含数百万个对象的内存列表? 例如,如果表很大,我怀疑以下内容会爆炸: List<Model> models = entityManager().createQuery("from Model m", Model.class).getResultList(); for (Model model : models) { System.out.println(model.getId()); } 分页(循环和手动更新setFirstResult()/ setMaxResult())真的是最好的解决方案吗? 编辑:我针对的主要用例是一种批处理作业。如果需要很长时间才能运行就可以了。没有涉及Web客户端。我只需要为每一行“做某事”,一次一行(或一些小N)。我只是想避免将它们全部同时存储在内存中。
114 java  hibernate  jpa 

7
JPA-在persist()之后返回自动生成的ID
我正在使用JPA(EclipseLink)和Spring。假设我有一个带有自动生成的ID的简单实体: @Entity public class ABC implements Serializable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; // ... } 在我的DAO类中,我有一个调用persist()此实体的insert方法。我希望该方法为新实体返回生成的ID,但是当我对其进行测试时,它将返回0。 public class ABCDao { @PersistenceContext EntityManager em; @Transactional(readOnly=false) public int insertABC(ABC abc) { em.persist(abc); // I WANT TO RETURN THE AUTO-GENERATED ID OF abc // HOW CAN I DO IT? return abc.id; // …
113 java  jpa 

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.