如何使用JPA Query将数据插入db?

时间:2017-03-11 19:24:22

标签: java sql spring-boot spring-data-jpa

我的预备语句有问题,但我无法弄清楚错误的位置。我正在尝试将URI链接插入数据库。

$options = new ListContainersOptions();
$options->setPrefix("prefixxxx");
$blobContainers = $blobRestProxy->listContainers($options);
$blobContainerArray = $blobContainers->getContainers();

foreach ($blobContainerArray as $container) 
{
    Trace("Container: " . $container->getName());
}

错误

 @Repository
 public interface LoggerDao extends CrudRepository<Logger, Long> {
 @Query("select t from Logger t where t.user.id=?#{principal.id}")
 List<Logger> findAll();

@Modifying
@Query(value = "insert into Logger t (t.redirect, t.user.id) VALUES (:insertLink,?#{principal.id})", nativeQuery = true)
@Transactional
void logURI(@Param("insertLink") String insertLink);

2 个答案:

答案 0 :(得分:9)

我设法解决了这个问题。我在参数中添加了一个id,以便我可以使用控制器中的Principal传入用户的id。

@Repository
public interface LoggerDao extends CrudRepository<Logger, Long> {
    @Query("select t from Logger t where t.user.id=?#{principal.id}")
    List<Logger> findAll();

    @Modifying
    @Query(value = "insert into Logger (redirect,user_id) VALUES (:insertLink,:id)", nativeQuery = true)
    @Transactional
    void logURI(@Param("insertLink") String insertLink, @Param("id") Long id);

答案 1 :(得分:1)

有一种方法可以使用obj(非本机)查询进行插入(使用@Query&amp; @Modifying),但这取决于您正在使用的数据库。以下在Oracle中使用(使用双表):

@Repository
public interface DualRepository extends JpaRepository<Dual,Long> {
    @Modifying
    @Query("insert into Person (id,name,age) select :id,:name,:age from Dual")
    public int modifyingQueryInsertPerson(@Param("id")Long id, @Param("name")String name, @Param("age")Integer age);
}

这是一个链接,在底部显示db的支持选择没有from子句的stmts:http://modern-sql.com/use-case/select-without-from