- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我想从具有复合键和额外列的关联表中删除时遇到问题。
关联表由一个实体表示,该实体具有两个对象:协作者和能力,并且具有关系@ManyToOne。另一方面,我与 CollaboratorCompetence Entity 存在关系 @OneToMany,该关系具有复合键(collaborator_id,competent_id)。
当我执行此查询来删除 collaborators_competences 表上的一行时,它起作用了。
Query 1
DELETE FROM collaborators_competences WHERE (collaborator_id, competence_id)
IN (SELECT collaborator_id, competence_id FROM collaborators_competences
JOIN collaborators c on collaborators_competences.collaborator_id = c.id
JOIN competences c2 on collaborators_competences.competence_id = c2.id
WHERE c.id = (SELECT collaborators.id FROM collaborators WHERE login = :collabLogin) AND c2.id = :competenceId)
Query 2 (simplified)
DELETE FROM collaborators_competences cc WHERE cc.collaborator_id = (SELECT collaborators.id FROM collaborators WHERE collaborators.login = :collabLogin)AND cc.competence_id = :competenceId
现在,当我使用存储库执行相同的查询时,我收到错误“无法提取结果集”。
Repository
public interface CollaboratorCompetenceRepository extends JpaRepository<CollaboratorCompetence, CollaboratorCompetenceId> {
Optional<CollaboratorCompetence> findById(CollaboratorCompetenceId id);
// @Query(value = "DELETE FROM CollaboratorCompetence " +
// "WHERE CollaboratorCompetence.collaborator IN (SELECT Collaborator FROM Collaborator WHERE Collaborator.login = :collabLogin)" +
// "AND CollaboratorCompetence.competence IN (SELECT COmpetence FROM Competence WHERE Competence.id = :competenceId)")
// @Query(value = "DELETE FROM collaborators_competences WHERE collaborator_id = 1128 AND competence_id = 2551", nativeQuery = true)
@Query(value = "DELETE FROM collaborators_competences WHERE (collaborator_id, competence_id)\n" +
" IN (SELECT collaborator_id, competence_id FROM collaborators_competences\n" +
" JOIN collaborators c on collaborators_competences.collaborator_id = c.id\n" +
" JOIN competences c2 on collaborators_competences.competence_id = c2.id\n" +
" WHERE c.id = (SELECT collaborators.id FROM collaborators WHERE login = :collabLogin) AND c2.id = :competenceId)", nativeQuery = true)
void deleteByCollaboratorLoginAndCompetenceId(@Param("collabLogin") String login, @Param("competenceId") Long id);
void deleteCollaboratorCompetenceById(CollaboratorCompetenceId id);
}
即使使用 Spring Data,Hibernate 也只执行选择查询,而不执行删除查询。
CollaboratorCompetence Entity
@Entity
@Table(name = "collaborators_competences")
public class CollaboratorCompetence {
@EmbeddedId
private CollaboratorCompetenceId id;
@ManyToOne
@MapsId("collaboratorId")
private Collaborator collaborator;
@ManyToOne
@MapsId("competenceId")
private Competence competence;
@Column(name = "note")
private Integer note;
public CollaboratorCompetence() {
}
public CollaboratorCompetence(Collaborator collaborator, Competence competence, Integer note) {
this.id = new CollaboratorCompetenceId(collaborator.getId(), competence.getId());
this.collaborator = collaborator;
this.competence = competence;
this.note = note;
}
CollaboratorCompetenceId (Embedable class)
@Embeddable
public class CollaboratorCompetenceId implements Serializable {
@JoinColumn(name = "competence_id", table = "collaborators_competences")
private Long competenceId;
@JoinColumn(name = "collaborator_id", table = "collaborators_competences")
private Long collaboratorId;
public CollaboratorCompetenceId() {
}
public CollaboratorCompetenceId(Long competenceId, Long collaboratorId) {
this.competenceId = competenceId;
this.collaboratorId = collaboratorId;
}
public Long getCompetenceId() {
return competenceId;
}
public void setCompetenceId(Long competenceId) {
this.competenceId = competenceId;
}
public Long getCollaboratorId() {
return collaboratorId;
}
public void setCollaboratorId(Long collaboratorId) {
this.collaboratorId = collaboratorId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CollaboratorCompetenceId that = (CollaboratorCompetenceId) o;
return Objects.equals(competenceId, that.competenceId) &&
Objects.equals(collaboratorId, that.collaboratorId);
}
@Override
public int hashCode() {
return Objects.hash(competenceId, collaboratorId);
}
@Override
public String toString() {
return "CollaboratorCompetenceId{" +
"competenceId=" + competenceId +
", collaboratorId=" + collaboratorId +
'}';
}
}
Error stack :
Caused by: org.hibernate.exception.GenericJDBCException: could not extract ResultSet
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:69)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2168)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1931)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1893)
at org.hibernate.loader.Loader.doQuery(Loader.java:938)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
at org.hibernate.loader.Loader.doList(Loader.java:2692)
at org.hibernate.loader.Loader.doList(Loader.java:2675)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507)
at org.hibernate.loader.Loader.list(Loader.java:2502)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2200)
at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016)
at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1463)
at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:214)
at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:91)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:136)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:125)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:602)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:590)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
... 175 common frames omitted
Caused by: org.postgresql.util.PSQLException: Aucun résultat retourné par la requête.
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:107)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)
... 203 common frames omitted
最佳答案
您需要向查询添加注释@Modifying
。
@Modifying
@Transactional
@Query(value = "DELETE FROM collaborators_competences WHERE (collaborator_id, competence_id)\n" +
" IN (SELECT collaborator_id, competence_id FROM collaborators_competences\n" +
" JOIN collaborators c on collaborators_competences.collaborator_id = c.id\n" +
" JOIN competences c2 on collaborators_competences.competence_id = c2.id\n" +
" WHERE c.id = (SELECT collaborators.id FROM collaborators WHERE login = :collabLogin) AND c2.id = :competenceId)", nativeQuery = true)
void deleteByCollaboratorLoginAndCompetenceId(@Param("collabLogin") String login, @Param("competenceId") Long id);
@Transactional
void deleteCollaboratorCompetenceById(CollaboratorCompetenceId id);
使用@Modifying
正如注释所说,它用于修改查询。现在,什么是修改查询。
@Modifying
应用于使用 @Query
注释的 JPA 存储库中的自定义查询注意: 有时您可能会遇到 RollBackException
异常,此时您需要使用 @Transactional
注解来处理逻辑。当您遇到此类异常时,只需使用 @Transactional
注释您的方法或存储库方法签名即可。
关于java - 从具有主组合键的关联表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59964765/
这是代码片段。 请说出这种用小内存存储大数据的算法是什么。 public static void main(String[] args) { long longValue = 21474836
所以我使用 imap 从 gmail 和 outlook 接收电子邮件。 Gmail 像这样编码 =?UTF-8?B?UmU6IM69zq3OvyDOtc68zrHOuc67IG5ldyBlbWFpb
很久以前就学会了 C 代码;想用 Scheme 尝试一些新的和不同的东西。我正在尝试制作一个接受两个参数并返回两者中较大者的过程,例如 (define (larger x y) (if (> x
Azure 恢复服务保管库有两个备份配置选项 - LRS 与 GRS 这是一个有关 Azure 恢复服务保管库的问题。 当其驻留区域发生故障时,如何处理启用异地冗余的恢复服务保管库?如果未为恢复服务启
说,我有以下实体: @Entity public class A { @Id @GeneratedValue private Long id; @Embedded private
我有下一个问题。 我有下一个标准: criteria.add(Restrictions.in("entity.otherEntity", getOtherEntitiesList())); 如果我的
如果这是任何类型的重复,我会提前申请,但我找不到任何可以解决我的具体问题的内容。 这是我的程序: import java.util.Random; public class CarnivalGame{
我目前正在使用golang创建一个聚合管道,在其中使用“$ or”运算符查询文档。 结果是一堆需要分组的未分组文档,这样我就可以进入下一阶段,找到两个数据集之间的交集。 然后将其用于在单独的集合中进行
是否可以在正则表达式中创建 OR 条件。 我正在尝试查找包含此类模式的文件名列表的匹配项 第一个案例 xxxxx-hello.file 或者案例二 xxxx-hello-unasigned.file
该程序只是在用户输入行数时创建菱形的形状,因此它有 6 个 for 循环; 3 个循环创建第一个三角形,3 个循环创建另一个三角形,通过这 2 个三角形和 6 个循环,我们得到了一个菱形,这是整个程序
我有一个像这样的查询字符串 www.google.com?Department=Education & Finance&Department=Health 我有这些 li 标签,它们的查询字符串是这样
我有一个带有静态构造函数的类,我用它来读取 app.config 值。如何使用不同的配置值对类进行单元测试。我正在考虑在不同的应用程序域中运行每个测试,这样我就可以为每个测试执行静态构造函数 - 但我
我正在寻找一个可以容纳多个键的容器,如果我为其中一个键值输入保留值(例如 0),它会被视为“或”搜索。 map, int > myContainer; myContainer.insert(make_
我正在为 Web 应用程序创建数据库,并正在寻找一些建议来对可能具有多种类型的单个实体进行建模,每种类型具有不同的属性。 作为示例,假设我想为“数据源”对象创建一个关系模型。所有数据源都会有一些共享属
(1) =>CREATE TABLE T1(id BIGSERIAL PRIMARY KEY, name TEXT); CREATE TABLE (2) =>INSERT INTO T1 (name)
我不确定在使用别名时如何解决不明确的列引用。 假设有两个表,a 和 b,它们都有一个 name 列。如果我加入这两个表并为结果添加别名,我不知道如何为这两个表引用 name 列。我已经尝试了一些变体,
我的查询是: select * from table where id IN (1,5,4,3,2) 我想要的与这个顺序完全相同,不是从1...5,而是从1,5,4,3,2。我怎样才能做到这一点? 最
我正在使用 C# 代码执行动态生成的 MySQL 查询。抛出异常: CREATE TABLE dump ("@employee_OID" VARCHAR(50)); "{"You have an er
我有日期 2016-03-30T23:59:59.000000+0000。我可以知道它的格式是什么吗?因为如果我使用 yyyy-MM-dd'T'HH:mm:ss.SSS,它会抛出异常 最佳答案 Sim
我有一个示例模式,它的 SQL Fiddle 如下: http://sqlfiddle.com/#!2/6816b/2 这个 fiddle 只是根据 where 子句中的条件查询示例数据库,如下所示:
我是一名优秀的程序员,十分优秀!