jpa 相关问题

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

使用oracle数据库运行spring boot服务时出错

当我尝试在本地运行 spring boot 服务(用于查询数据库表)时,它给了我错误。 该服务尝试连接到 oracle 数据库。 下面是我们看到的错误 无法打开 JPA

回答 1 投票 0

STS(Spring Tool Suite)中不提供 Spring boot jpa 工具用于将表转换为实体

这里我正在Spring工具套件中的Spring boot中工作。我想将Oracle数据库表转换为JPA类实体。但我没有在project_folder ->jpa 工具中获得任何JPA 工具。我必须做什么...

回答 5 投票 0

Jakarta 持久化 api 的 OpenJPA 升级

我一直在尝试将我的项目升级到spring 3.1.0。目前它使用 OpenJpa 和 java 持久性模式 1.x。 如果我将 javax.persistence 包升级到 jakarta.persistence 包,w...

回答 1 投票 0

JPA @OneToMany LAZY 关系的 Java Spring Boot 性能问题

我有一些 DepartmentView 与另一个视图 UserDepartmentView 有 @OneToMany 关系,我的问题是当我尝试加载所有部门时需要太多时间。 大约需要4秒才能...

回答 1 投票 0

如何使用data-jpa更新postgress的jsonb列数据?

如何使用jpa更新jsonb postgresql表列? 当我尝试将列实体定义为 jsonb 时,它会抛出错误

回答 1 投票 0

无法解析列“account_id”

像图片一样,我无法为列设置名称 我使用休眠 6.4.4 我正在尝试在帐户和人员之间创建关系,但收到错误“无法解析列 'accound_id'”,...

回答 1 投票 0

kotlin 中的 JPA 错误:“学生”类应该具有 [public,protected] 无参数构造函数

有谁知道我如何解决这个问题:'类'Student'应该有[public,protected]无参数构造函数'? 它在抱怨与 SchoolLesson 的关系 导入 javax.persistence.Entity

回答 7 投票 0

Spring Boot 与 JPA 增加内存使用量

我正在使用 Spring Boot Web 应用程序运行 JPA 教程代码。 我的 POM 是 我正在使用 Spring Boot Web 应用程序运行 JPA 教程代码。 我的 POM 是 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>xxx</modelVersion> <groupId>xxxx</groupId> <artifactId>xxx</artifactId> <version>xxx</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath /> </parent> <properties> <start-class>com.Main</start-class> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc --> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 我只坚持一门课: @Entity @JsonInclude(Include.NON_NULL) public class TransactionData { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique=true) private String referenceId; public String getReferenceId() { return referenceId; } public void setReferenceId(String referenceId) { this.referenceId = referenceId; } 我的应用程序属性是: spring.datasource.url= jdbc:sqlserver://xxx.xxx.xxx.xxx:xxxx;databaseName=xxxxxx spring.datasource.username= xxx spring.datasource.password= xxx spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServerDialect spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update 休息控制器: @Autowired TDataService tDataService; @RequestMapping("/initTx") @ResponseBody public String initTx(String atmId, String refId) { TransactionData tD=new TransactionData(); tD.setReferenceId(refId); return tDataService.save(tD).getReferenceId(); } 服务: @Autowired TDataRepo repository; public TransactionData save(TransactionData tData) { return repository.save(tData); } 存储库: public interface TDataRepo extends JpaRepository<TransactionData, Long> Repository 实现了 JpaRepository 中提供的 save 方法,无需修改。 一旦我使用Web应用程序启动tomcat,我就会执行简单的负载压力测试。我正在对控制器运行 1000 个休息调用,一次创建 1 个到 dB 的插入。通话之间有 1 秒延迟。 测试过程中,RAM不断增加,这是预料之中的,但从未释放。完成这些 1k 插入后,我不会向 Web 控制器发送任何请求,但 ram 保持不变,永远不会下降到原始空闲值。 我在这里遗漏了一些重要的东西吗? 我不认为那里存在“内存泄漏”。我认为这与JVM如何管理内存有关。简而言之,它不会立即将未使用的内存返回给操作系统。您可以在这里找到一些提示GC是否将内存释放给操作系统?

回答 1 投票 0

如何使 DTO 接受空字符串字段,但如果它们不为空则应用 JPA 验证?

我希望 DTO 使用验证器注释来验证字段输入,但前提是相关字段不是请求中的空字符串。 例如,我有一个 UserDto ,它需要一个

回答 1 投票 0

@OneToMany 关系的反转 JPA 结果

我将把我的问题分为3部分: JPA 实体 当前数据库设置 问题 1.JPA实体 富 @实体 @Table(名称=“foo”) 公共类 Foo { @ID @GenerateValue(

回答 1 投票 0

Hibernate执行更新SQL语句但更新没有写入数据库

我有一个在 WildFly 服务器上运行的 Java EE 应用程序。持久化单元中的配置如下: 我有一个在 WildFly 服务器上运行的 Java EE 应用程序。持久化单元中的配置如下: <persistence-unit name="default" transaction-type="JTA"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <jta-data-source>java:/jboss/datasources/templateDS</jta-data-source> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <validation-mode>AUTO</validation-mode> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="use_sql_comments" value="false" /> <property name="hibernate.cache.use_second_level_cache" value="true" /> <property name="hibernate.cache.use_query_cache" value="true" /> <!-- <property name="hibernate.cache.region.factory_class" vvalue="org.hibernate.transaction.CMTTransactionFactory"/>--> <!-- <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.JndiInfinispanRegionFactory" />--> <property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/container/hibernate" /> <!-- <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>--> <property name="hibernate.generate_statistics" value="false" /> <!-- none | validate | update | create | create-drop --> <property name="hibernate.hbm2ddl.auto" value="none" /> </properties> </persistence-unit> 我有一些业务逻辑,用于向用户发送 Firebase 推送通知,作为一种有针对性的通信形式。用户基数相当大(> 10k),因此我们决定以 10 个为一组对消息收件人进行分页和批处理,以确保不存在内存问题。我有一个名为 MessageRecipient 的实体,它管理接收消息的用户。它有一个列来管理状态,当逻辑运行时,我们希望将每条已发送消息的状态从“未发送”更新为“已发送”或“失败”。以下是我在方法中运行的业务逻辑: private void sendTargetedMessages(CsvFile dueFile) { LOGGER.debug("in send targeted messages"); String filename = dueFile.getFilename(); String batchRef = filename.substring(0, filename.indexOf('.')); // Calculate number of recipients. int numberOfRecipients = crudService.findAllByColumn(MessageRecipient.class, batchRef, "batchRef").size(); int pageNumber = 0; int pageSize = 10; //TODO: Change this to config entry Integer num_sent = 0; // Calculate number of pages. Use calculated number of pages to run the logic in a do while loop that increments do { List<MessageRecipient> recipients = crudService.findAllByColumn(MessageRecipient.class, batchRef, "batchRef", new Paging(pageNumber, pageSize)); // Execute the logic if (recipients != null) { // send targeted messages User u; for (MessageRecipient r : recipients) { u = null; if (RecipientState.UNSENT.equals(r.getState())) { if (UserReferenceType.CVS_REF.equals(dueFile.getUserReferenceType())) { u = userRepository.findUserByCvsRef(r.getReference(), Status.ACTIVE); } else { try { u = userRepository.findUserByUserId(Long.parseLong(r.getReference()), Status.ACTIVE); } catch (NumberFormatException e) { r.setState(RecipientState.FAILED); LOGGER.error("Reference cannot be converted to long.", e); } } if (u != null) { pushNotificationService.sendTargetedCommunication(u, dueFile.getCommId()); r.setState(RecipientState.SENT); num_sent++; } //crudService.merge(r); entityManager.merge(r); entityManager.flush(); } } } else { LOGGER.error("No recipients found for targeted communication."); } // Increment page number pageNumber++; } while (pageNumber <= (calculateNumberOfPages(numberOfRecipients, pageSize) - 1)); // Send email report once done if (!StringUtils.isBlank(dueFile.getReportEmails())) { String[] reportEmails = dueFile.getReportEmails().split(","); List<String> reportEmailsList = Arrays.asList(reportEmails); messagingReportService.sendEmailReport(reportEmailsList, batchRef, numberOfRecipients, num_sent, dueFile.getBucketName()); } } 我调用entityManager merge() 和flush() 来尝试在发送推送通知后更新每个MessageRecipient 记录的状态,但状态在我的数据库(MySQL 数据库)中没有更新。我在应用程序中打开了 SQL 语句日志记录,并且看到 Hibernate 执行更新 SQL 语句,尽管我的数据库中没有更新。我该如何解决这个问题? 11:04:54,017 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) Hibernate: 11:04:54,018 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) update 11:04:54,018 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) message_recipient 11:04:54,019 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) set 11:04:54,019 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) last_updated=?, 11:04:54,019 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) batch_ref=?, 11:04:54,020 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) reference=?, 11:04:54,020 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) state=? 11:04:54,021 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) where 11:04:54,021 INFO [stdout] (EE-ManagedScheduledExecutorService-default-Thread-1) id=? 最初我只是调用 entityManager.merge(T entity),Hibernate 在尝试更新实体时没有生成更新 SQL 语句,但我添加了 entityManager.flush(),现在我在日志中看到它。但是,我的问题是数据库也没有更新。 您正在使用二级缓存,可能是缓存尚未刷新事务,请尝试读取应用程序中的更改(如果您尝试读取时存在更改),没问题,它按预期工作,那么这意味着它的缓存未刷新还没有到 DB。 另一件事是确保您使用 EJB 和 @TransactionManagement(TransactionManagementType.CONTAINER) 在容器管理的 TX 范围内进行操作

回答 1 投票 0

@NamedEntityMap 似乎在 Wildfly 30.0.x 中不起作用

我尝试使用 EntityGraph 来避免使用 fetch=FetchType.EAGER: EntityGraph graph =EntityManager.getEntityGraph("parent.hierarchy"); 地图提示...

回答 1 投票 0

在 Hibernate 中保存对象时遇到问题

也许是一个微不足道的问题,但我查遍了我能查到的所有信息,但找不到解决方案 我正在尝试使用发布请求保存一个新的地质类(不是最好的命名,但这就是任务......

回答 1 投票 0

如何根据限制子句将 OneToMany 关系映射到 OneToOne?

我有两个 JPA 实体: @实体 @Table(名称=“账户”) 数据类帐户( @ID @Column(名称 = "uuid") var uuid:UUID, @Column(名称 = "电子邮件") ...

回答 1 投票 0

在 JPA 查询中,如何传递值列表并获取表中不存在的 id?

我有一个名为“employee”的表,其中 id 作为列。我想通过提供 ids 列表来查询数据库,并仅获取数据库中不存在的 id。我试过 @Query(值 = "...

回答 2 投票 0

Netbeans 11.2 GUI Palette Java 持久性部分缺失

我已将 Netbeans 升级到 11.2,同时打开旧的 GUI 项目。我注意到调色板的 Java Persistence 部分丢失了。 我已尝试重新安装 Netbeans 并重置 w...

回答 1 投票 0

JpaRepository 方法给出了意外的数据

我有这张表,其中包含以下数据。 从测试1中选择*; +--------+------------+------------+------------+---- -------+------------+------------+ |用户 ID |有访问权限 |图片网址 |菜单_id |

回答 1 投票 0

Spring Data with Postgres 问题:如何将时区参数传递到本机查询中?

我有一个本机查询: @Query( value = "选择 to_char(o.earliest_delivery_time at time zone 'UTC', 'Mon YYYY') 作为月份," + “ count(o.id) 作为订单数量,” + “ sum(lp.net_qty) 作为

回答 1 投票 0

使用 H2 的 DataJpaTest 无法访问子选择实体中的数据

我正在使用 H2 数据库运行设置为 DataJpaTest 的单元测试。它运行良好,直到我使用子选择引入了一个新的不可变实体集。它没有损坏,但找不到数据...

回答 1 投票 0

Spring Boot JPA 批量插入

我有 3 个实体父、子、子子。 Parent 是 Child 的父级,而 Child 是 SubChild 的父级。我需要插入大约 700 个 Parent 对象。父级可以拥有 50 个子级对象。孩子可以...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.