Play Framework(Java) - Ebean:PersistenceException:未注册ScalarType

时间:2015-05-29 07:55:36

标签: java playframework playframework-2.1 ebean

我是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值的特定问题。

我有什么想法可以解决这个错误吗?

这是我的第一个问题,如果我不够清楚,请放纵一下!

谢谢大家的帮助!! : - )

1 个答案:

答案 0 :(得分:2)

当然,一如既往,在花了几个小时寻找解决方案后,我在这里寻求帮助后几分钟就找到了它 - -

我在这里发布,以防其他人遇到同样的问题! 基本上我的代码有两个错误:

  1. 我忘记了SQL查询中的昏迷,它应该是这样的:

        String sql = "UPDATE product_release SET lastedited_date= :id2, lastedited_user_id= :id3  WHERE id= :id1";
    
  2. 在定义参数时,我试图直接传递User:在我的表“product_release”的数据库和列“lastedited_user_id”中,在User表中插入了id作为该用户的链接。

  3. 这是一个错误的想法,我必须将用户的ID传递给     数据库!所以参数的设置应该是这样的:

    update.setParameter("id3", currentUser.id); 
    

    这就是所有人! : - )