java - JPA更新查询问题

标签 java jpa

假设我们有 2 个实体

@Entity(name = "user")
@Inheritance(strategy = InheritanceType.JOINED)
public class User{

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Long id;

 private String name;
}

另一个继承类

@Entity
public class ExtendedUser extends User{
   private String bio;
}

现在当我尝试运行 JPA 更新查询时

@Modifying
@Query("update ExtendedUser  set bio=?2 where id=?1")
void updateOverflowText(Long id,String bio);

由于列“id”不明确,我遇到异常,无法运行查询

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' in where clause is ambiguous
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
 at com.mysql.jdbc.Util.getInstance(Util.java:386)
 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
 at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
 at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)
 at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2371)
 at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2355)
 at org.hibernate.hql.ast.exec.MultiTableUpdateExecutor.execute(MultiTableUpdateExecutor.java:142)
 ... 103 more

最佳答案

试试这个

update User usr set usr.bio=?2 where usr.id=?1

关于java - JPA更新查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24423163/

相关文章:

java - WLS 10 客户端中抛出类未找到异常 (org.apache.openjpa.enhance.PersistenceCapable)

java - 通过 JAX-WS 使用 Web 服务

java - 使用内联条件语句格式化小数

java - 如何将 JComponent 定位到 BorderLayout 中的真正中心?

java - 即使指定了列名也是错误的

java - 在哪里锁定以进行实体行的原子获取或创建

java - 串口通信和Web应用

java - 返回函数和存储变量有什么区别?

spring-mvc - 使用可嵌入键中的两个字段进行删除的 Spring Data JPA 方法

java - Spring CriteriaBuilder 按名称搜索枚举