【问题标题】:Insert a new row using JpaRepository in java在 java 中使用 JpaRepository 插入新行
【发布时间】:2018-03-17 10:40:20
【问题描述】:

我对 Spring JPA 很陌生。我有以下要插入到表中的实体类:

@Entity
@Table(name = "test")
public class Test {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "user")
    private String user;
}

我有一个名为test 的空表。我有多个 Test 对象,我想将它插入到表中。为此,我创建了一个 repo 类:

@Repository("testRepo")
public interface TestRepo extends JpaRepository<Test, String> {
//write insert query    
    @Modifying
    @Query(//What insert query I should write)
    void insertData(@Param("id") String id);

}

我已搜索但仅获得更新查询的选项。

【问题讨论】:

  • 这是 Spring Data JPA (!= JPA API)

标签: java mysql spring spring-data-jpa


【解决方案1】:

方法.save(Entity entity),继承自父接口CrudRepository,可用于更新现有实体或创建新实体。

【讨论】:

    【解决方案2】:

    您的存储库接口从 JpaRepository 扩展而来,而 JpaRepository 从 CrudRepository 扩展而来。 savesaveAndFlush 方法可用作默认插入新行。

    保存: 插入新行。您可以将行列表作为此方法的参数。在您的示例中,它应该像这样使用:

    testRepo.save(testEntity);
    

    testRepo.save(testEntities);
    

    saveAndFlush: 仅插入新行并立即提交更改。 在您的示例中,它应该像这样使用:

    testRepo.saveAndFlush(testEntity);
    

    【讨论】:

      【解决方案3】:

      在您的服务类中执行类似于以下的操作。 您不必编写单独的方法来保存实体。可以使用repository的save方法来保存实体。

      class TestDAO{
      
      @Autowired
      TestRepo testRepo;
      
      public void saveTest(Test test) {
      testRepo.save(test);
      }
      

      【讨论】:

        【解决方案4】:

        ("插入表值 (?1)",nativeQuery = true)

        【讨论】:

          猜你喜欢
          • 2018-11-19
          • 2011-12-11
          • 1970-01-01
          • 2019-12-24
          • 2018-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多