2015-03-07 4 views
5

Недавно я начал использовать Play Framework 2.3.8.Метод обновления ebean не работает в playframework

Однако обновление модели есть у меня проблемы без работы.

Кстати, сохранить метод работает.

Обновление не работает с кодом, как показано ниже. (Это не будет сохраняться в базе данных.)

User user = User.findByEmail(email); 
user.remoteAddress = remoteAddress; 
user.userAgent  = userAgent; 
user.latitude  = latitude; 
user.longitude  = longitude; 
user.lastLoginAt = new Date(); 
user.update(); 

Однако следующий код будет работать, как задумано.

User newUser = new User(); 
newUser.id = user.id; 
newUser.remoteAddress = remoteAddress; 
newUser.userAgent  = userAgent; 
newUser.latitude  = latitude; 
newUser.longitude  = longitude; 
newUser.lastLoginAt = new Date(); 
newUser.update(); 

Почему я не могу обновить исходный экземпляр?

Пользовательский класс выглядит следующим образом.

package models.entities; 

import java.util.*; 

import javax.persistence.*; 

import com.avaje.ebean.annotation.*; 

import play.db.ebean.*; 
import play.db.ebean.Model.Finder; 

import play.data.validation.Constraints.*; 

import play.Logger; 

import models.services.*; 

/** 
* @author satouf 
*/ 
@Entity 
@Table(name="user") 
public class User extends Model { 

    @Id 
    public Long id; 

    @Column(nullable = false, columnDefinition = "varchar(32)") 
    public String userIdentifier; 

    @Column(nullable = false, columnDefinition = "varchar(255)") 
    public String loginId; 

    @Column(columnDefinition = "text") 
    public String loginPassword; 

    @Column(columnDefinition = "varchar(64)") 
    public String handleName; 

    @Email 
    @Column(nullable = false, columnDefinition = "varchar(255)") 
    public String email; 

    @Column(nullable = false, columnDefinition = "smallint default 0") 
    public short status; 

    @Column(columnDefinition = "varchar(64)") 
    public String lastRemoteAddress; 

    public String lastUserAgent; 

    public Date lastLoginAt; 

    public double latitude; 

    public double longitude; 

    @UpdatedTimestamp 
    public Date updatedAt; 

    @CreatedTimestamp 
    public Date createdAt; 

    public static Finder<Long, User> finder = new Finder<Long, User>(Long.class, User.class); 

    @Override 
    public String toString(){ 
    return ("[id: " + id + ", userIdentifier: " + userIdentifier +  ",  loginId: " + loginId + ", handleName: " 
     + handleName + ", latitude: " + latitude + ", longitude: " +  longitude + "]"); 
    } 

} 
+0

Что такое двигатель базы данных? не является 'user' зарезервированным словом в нем? попробуйте использовать '@Table (name =" users ")' вместо – biesior

+0

Я использую mysql.'user ', я думаю, что это не ограниченное слово. В mysql. –

+0

Вы получаете сообщение об ошибке после выдачи функции 'user.update()'? Или это просто не сохраняется в базе данных? – jcreason

ответ

0

Для обновления объектов добавить идентификатор в качестве параметров для update метода, а именно:

user.update(user.id); 

для создания объектов пе использовать save() метод без паров:

newUser.save(); 
+0

Благодарим за ответ. Я был изменен следующим образом. user.update (user.id); Но произошла ошибка. общедоступный идентификатор существует в классе User. Сообщение об ошибке ниже. Невозможно вызвать действие, в итоге получилось сообщение об ошибке: org.springframework.beans.InvalidPropertyException: Недопустимое свойство id из класса bean [models.entities.Пользователь]: Нет идентификатора 'id' найдено –

+0

Покажите нам свою модель пользователя – biesior

+0

Спасибо. Я отредактировал вопрос. –

16

По какой-то странной причине прямой доступ к членам не удался для обновления ebean.

Добавить сеттеры, например:

private setUserAgent(String val) { 
    this.userAgent = val; 
} 

и называют:

user.setUserAgent(your_val); 
user.update(); 
+0

Спасибо, ответ. Этот вопрос был решен после обновления до версии 2.4. –

+2

@Fuyuhiko Satou: Я использую Play 2.4.x. Эта проблема еще не решена. Вот почему google привел меня сюда – transang

+0

@ Nissassin17 Эта проблема кажется или не произошла или произошла. В моем случае это было решено случайно при обновлении, это не произошло в Linux и Mac. (Это происходит только в Windows) –

1

ли чистые и перекомпилировать

Это происходит потому, что у Вас возникли проблемы с боб свойство не обновляется ,

1

Выполнение полной перестройки. Проблема возникает, когда у вас есть существующий класс Model (например, User), и вы добавляете новое поле. Если вы не очищаете компиляцию, то PlayEnhancer не будет генерировать сеттеры/геттеры для нового поля, поэтому он не сможет выполнить обновление. Чистый компилятор сделает трюк. Дополнительная информация: https://www.playframework.com/documentation/2.6.x/PlayEnhancer

Смежные вопросы