当前位置: 首页 > 知识库问答 >
问题:

spring JPA:在数据库中保存实体对象

鲜于允晨
2023-03-14

我有一个实体CandidateTransaction和CandidateTransactionRepository扩展了CrudRepository

@Repository
public interface CandidateTransactionRepository extends CrudRepository<CandidateTransaction,Long>{
  //find methods 


}

    @Entity
    @Table(name = "ONB_CANDIDATE_TRANS")
    public class CandidateTransaction implements Serializable {

        private static final long serialVersionUID = 3615632069112078119L;

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer ID;
//other columns

我正在使用CrudRepository的save方法来保存所述实体的对象。当实体没有行时,它将创建一个自动生成的键并将其插入ID列,而不需要Java端的干预。

而且,由于CrudRepository的save()方法检查实体是否是新的,如果是新的,它会保存数据,否则它会调用merge方法更新同一行。

理想情况下,它应该处理这种情况,但在我的情况下,我必须特别检查具有特定值的行是否存在,如果是,则在现有对象中设置更新的值,然后保存它。

有什么办法可以解决这件事。

if (candidateTransactionRepository.existsByCandidateIdAndTransactionType(candidateId, transactionType))
                candidate = candidateTransactionRepository.findByCandidateIdAndTransactionType(candidateId,transactionType);

            candidate = prepareTransactionProgressObjectToSave(candidateId, transactionType, transactionStatus);

            savedInstance = candidateTransactionRepository.save(candidate);

同样,如果我必须保存相同实体的集合

共有1个答案

全彬
2023-03-14

理想情况下,它应该处理这种情况,但在我的情况下,我必须特别检查具有特定值的行是否存在,如果是,则在现有对象中设置更新的值,然后保存它。

主键(属性“id”)在表中是唯一的。如果一个实体在save()ing时没有设置的主键(idnull),那么CrudRepository将认为该实体之前没有保存,并在数据库中创建一个新行。

您在保存之前进行查找的技术是很常见的。您通常使用查找器方法(CrudRepository.findByPropertyName(...))通过实体的其他属性/列查找实体。finder方法返回的实体将具有一个非ID

同样,如果我必须保存相同实体的集合。

crudRepository.saveAll()是您的最佳选择,因为集合是可迭代的,因为方法要求它作为参数。

 类似资料:
  • 我是Hibernate的新手,并要求使用具有这些列的表的数据库 表:TBL _ product//库存项目列表< br >列:< br > key _ product < br > key _ category < br > fld _ product _ name < br > fld _ Inventory _ qty < br > fld _ unit _ price < br > fld

  • 我正在尝试开发一个小型电子商务项目。我有一个篮子和篮子项目实体。我只是想当我为客户保存购物篮时,我想把购物篮项目保存在数据库中。我认为我不应该为篮子项目创建存储库。我应该能够保存篮子项目,同时使用篮子存储库保存篮子。 在这里,我试图通过篮子服务获得一个篮子项目,并将其设置为篮子实体并保存它。 我有什么问题?我有个例外。

  • 我是Spring和冬眠的新手,遇到了一个几天都解决不了的问题。 在我的项目中,我在服务器和用户实体之间使用多对多关系。一个用户可以存在于多个服务器上。 我的想法是:服务器 创建表的代码: 这是我的课程的样子: 当我初始化数据时,这很有效。我创建了一个服务器对象,并在其中填充了用户,所有内容都正确保存了。 但是当我试图保存一个包含已经在users表中的用户的服务器时,我遇到了问题(如果我从数据库中级

  • 我在使用JPA时遇到了一些困难。我没有得到任何异常,但我不能保存任何东西到数据库。我从Hibernate到Jpa,在那里一切都工作得很好。下面是我的文件 Application.Properties: 存储库: 服务: 我在提交表单时得到了200的响应,但在数据库中找不到数据

  • 我有一个问题,Spring数据没有保存实体。应用程序逻辑如下: 另一个应用程序正在监听负载相当重的Kafka主题(每秒数十条消息)并将消息插入数据库中具有“NEW”状态的表中。 @调度方法加载一个具有“NEW”状态的实体列表,这些实体被一个接一个地传输到FixedThreadPool(20个线程),它们的状态设置为“PROCESSING”和一个saveAll方法调用同一个表。 这两种日志方法都显示

  • 问题内容: 我有以下问题,当试图在数据库中插入对象时,Hibernate卡住,没有返回错误,对象没有正确保存。 调试它,我发现它挂在 我正在使用PostgreSQL作为数据库。 我的配置文件: SELECT部分​​起作用。 我不确定我缺少什么。同样使用本地SQL插入命令,它也可以工作。 问题答案: 我没看到你这么忙 但最可取的是