【发布时间】:2014-08-16 20:55:39
【问题描述】:
假设我们有 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 ExtendedUser usr set usr.bio=?2 where usr.id=?1 -
试过了。但它没有工作
-
如果您在后端执行相同的更新语句并使用值查看它是否正常工作。
-
这个answer 可以帮助你。