jpa 相关问题

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

如何使 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

Vaadin 示例项目在使用 @ManyToMany 时遇到问题

这是 Vaadin 示例项目遇到 @OneToMany @ManyToOne 问题的后续问题 (为了一次一个问题地提问) 这是我的公共示例项目,它很简单......

回答 1 投票 0

类型“class *”尚未增强JPA异常

我正在运行 WebSphere v8,并在 Java EE 6 环境中使用 JPA 持久性。 当我尝试运行处理特定实体的代码时,我遇到了以下异常: javax.ejb.

回答 4 投票 0

在Servlet内的容器管理事务上下文中调用EntityManager的方法是线程安全的吗?

servlet 中有以下代码片段 @PeristenceContext 私有EntityManager实体管理器; @覆盖 protected void doPost(HttpServletRequest req, HttpServletResponse resp) ...

回答 1 投票 0

如何使用 Hibernate 将 ENUM 数据类型从数据库正确映射到 Spring Data JPA 实体?

如何使用 Hibernate 将 ENUM 数据类型从数据库正确映射到 Spring Data JPA 实体? 我在数据库模式中定义了一个 ENUM 类型,并且我正在使用 Spring Data JPA 和 Hiberna...

回答 1 投票 0

理解spring Hibernate生成sql

示例 2:一对一关联,假设源和目标共享相同的主键值。 // 在 Employee 类上: @实体 公共类员工{ @Id 整数id; @一对一@

回答 1 投票 0

如何在 JPA 2.0 中创建类似“实例”的查询?

假设我们有一个抽象@Entity Animal,以及几个扩展Animal的实体类,包括Dog、Cat、Monkey和Bat。 如何根据扩展实体的类过滤结果? 前...

回答 3 投票 0

我的Java Spring项目没有找到模型

我的项目没有在UserController类中创建UserRepository组件。 包com.example.diplomAPI; 导入 org.springframework.boot.SpringApplication; 导入org.springframework.boot。

回答 1 投票 0

Hibernate UnsatisfiedDependencyException:原因:方法公共抽象 java.util.List 的查询验证失败

我明白了 org.springframework.beans.factory.UnsatisfiedDependencyException 以下是我的友谊实体类 // 友谊.java 包 com.socialPulse.socialPulse.modal; 进口杰克...

回答 1 投票 0

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