我看过这些链接
我的例子如下:
Person是一个简单的实体w / 3字段“Long id,String name,Integer age”,并映射到相应的Person表,每个上面有3列)
@Repository
public interface DualRepository extends JpaRepository<Dual,Long> {
@Modifying
@Query(? - what goes here - ?)
public int modifyingQueryInsertPerson(@Param("id")Long id, @Param("name")String name, @Param("age")Integer age);
}
是否有办法只使用@Query&amp; amp; @Modifying(即不使用本机SQL查询&amp; nativeQuery = true,或者save(),或saveAndFlush()?
答案 0 :(得分:3)
您可以像下面那样传递Java对象,而不是传递所有参数
@Modifying(clearAutomatically = true)
@Transactional
@Query(value = "insert into [xx_schema].[shipment_p] (gpn,qty,hscode,country_of_origin,created_date_time,shipment_id) "
+ "VALUES (:#{#sp.gpn},:#{#sp.qty}, :#{#sp.hscode} ,:#{#sp.countryOfOrigin}, :#{#sp.createdDateTime}, :#{#sp.id} )", nativeQuery = true)
public void saveShipmentPRoducts(@Param("sp") ShipmentProducts sp);
答案 1 :(得分:0)
尝试了几件事后,有一种方法可以做到这一点,但这取决于您使用的数据库。
以下是Oracle和我的工作。在表中插入了1行(使用Dual表,因为我可以使用&#34;来自Dual&#34;在&#34;选择&#34之后):
@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);
}
在MS SqlServer中,可以选择&#34;选择&#34;如果没有&#34;来自&#34;,那么&#34;选择10,&#39; name10&#39;,100&#34;工作,所以下面应该适用于MS Sqlserver(但没有测试过)
@Repository
public interface PersonRepository extends JpaRepository<Person,Long> {
@Modifying
@Query("insert into Person (id,name,age) select :id,:name,:age")
public int modifyingQueryInsertPerson(@Param("id")Long id, @Param("name")String name, @Param("age")Integer age);
}
我没试过w /任何其他数据库。这是一个链接,显示(最后)哪个db支持选择没有from子句的stmts:http://modern-sql.com/use-case/select-without-from
答案 2 :(得分:0)
@Query
通常用于创建自定义用户查询以从数据库中获取值
@Query
@Modifying
用于执行数据库
save
方法用于插入新记录或更新会话中的记录。