我是Play Framework的新手,我正在开发一个现有的项目来解决一些问题。
我的问题如下:当使用Ebean update()函数更新数据库中的某些值(最后编辑的用户和上次编辑的日期)时,我有一个“OptomisticLockException”。在尝试了我在互联网上找到的几个解决方案之后,正在使用的是一个原始的SQL查询,如下所述:
Update query instead of select + save
PlayFramework 2 + Ebean - raw Sql Update query - makes no effect on db
使用这个,我对Date没有任何问题,但是当我想更新用户时,我也会收到以下错误:“[PersistenceException:没有为类models.User注册ScalarType]”
这是我的问题:
String sql = "UPDATE product_release SET lastedited_date= :id2 lastedited_user_id= :id3 WHERE id= :id1";
SqlUpdate update = Ebean.createSqlUpdate(sql);
update.setParameter("id1", productReleaseId);
update.setParameter("id2", currentDate);
update.setParameter("id3", currentUser);
int modifiedCount = update.execute();
使用以下方法检索当前用户:
public static User findCurrentUser() {
String currentUserTgi = Context.current().session().get(Constants.TGI);
return User.find.where().eq(Constants.TGI, currentUserTgi).findUnique();
}
这是User class的开头:
@Entity
public class User extends Model implements Subject{
@Id
public Long id;
@Required
@Column(unique=true)
public String tgi;
@Required
public String firstName;
@Required
public String lastName;
@ManyToMany
public List<SecurityRole> roles;
public User(String tgi) {
this.tgi = tgi;
}
public static User.Finder<Long, User> find = new User.Finder<Long, User>(Long.class, User.class);
我已经在互联网上查看了,但不幸的是我没有找到任何解决方案......最接近的是StackOverflow question,但它涉及Enum值的特定问题。
我有什么想法可以解决这个错误吗?
这是我的第一个问题,如果我不够清楚,请放纵一下!
谢谢大家的帮助!! : - )
答案 0 :(得分:2)
当然,一如既往,在花了几个小时寻找解决方案后,我在这里寻求帮助后几分钟就找到了它 - -
我在这里发布,以防其他人遇到同样的问题! 基本上我的代码有两个错误:
我忘记了SQL查询中的昏迷,它应该是这样的:
String sql = "UPDATE product_release SET lastedited_date= :id2, lastedited_user_id= :id3 WHERE id= :id1";
在定义参数时,我试图直接传递User:在我的表“product_release”的数据库和列“lastedited_user_id”中,在User表中插入了id作为该用户的链接。
这是一个错误的想法,我必须将用户的ID传递给 数据库!所以参数的设置应该是这样的:
update.setParameter("id3", currentUser.id);
这就是所有人! : - )