我在扩展JPaRepository的界面中编写了一个删除某些对象的查询,但是当我执行查询时它会抛出异常! 任何人都可以为我解释并提前感谢你:)
查询:
HTTP/1.1 200 OK
X-Powered-By: Servlet/3.1
Content-Disposition: attachment; filename="20170517191000051.zip"
Content-Length: 1016
Content-Transfer-Encoding: binary
Content-Type: application/octet-stream
Date: Wed, 17 May 2017 10:10:51 GMT
binary data
我收到了这个错误,请不要请为我解释一下,谢谢大家:)
例外:
public interface LimitRepository extends JpaRepository<CLimit, Long> {
@Query("delete from CLimit l where l.trader.id =:#{#trader.id}")
void deleteLimitsByTrader(@Param("trader") CTrader trader);
}
答案 0 :(得分:90)
试试这个:
const getAllAnalysis => (user) => dispatch => {
let url = APIEndpoints["getAnalysis"];
const request = axios.get(url)
.then(response => disptach({
type:GET_ANALYSIS,
payload: response.data
}));
}
每当您尝试修改db中的记录时,您必须将其标记为@Transactional以及@Modifying,它指示Spring可以修改现有记录。
存储库方法必须为void或异常不断被抛出。
答案 1 :(得分:22)
我有同样的问题,我试过@afridi的答案,这个答案很好,但据我所知,做法不好。您不应在存储库类中使用@Transactional
注释,而应使用服务(和实现)类。请找到以下答案。
LimitServiceImpl.java
import org.springframework.transaction.annotation.Transactional;
...
@Override
@Transactional
public void deleteLimitsByTrader(CTrader trader) {
// here im calling the LimitRepository interface.
getEntityRepository().deleteLimitsByTrader(trader);
}
LimitRepository.java
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
...
public interface LimitRepository extends JpaRepository<CLimit, Long> {
@Modifying
@Query("delete from CLimit l where l.trader.id =:#{#trader.id}")
void deleteLimitsByTrader(@Param("trader") CTrader trader);
}
确保使用正确的导入。
答案 2 :(得分:2)
您忘记在method上方添加两个annotations
。
@Transactional
@Modifying
答案 3 :(得分:0)
我通过使用EntityManager.createQuery("your deleteStatement").executeUpdate();
我了解问题已经回答,但仍在发布,可能对需要解决的其他人很有帮助。
答案 4 :(得分:0)
添加@Transactional(org.springframework.transaction.annotation.Transactional) 和@Modifying(org.springframework.data.jpa.repository.Modifying) 为我解决了类似的问题