从Ebean中排除字段以将其保存在DB中

时间:2015-02-05 13:46:54

标签: java playframework ebean playframework-2.3

我有一个用户 bean:

@Entity
public class User extends Model{

    @Id
    public int id; 

    public String name; 
    public String username; 
    public String email; 
    public String password; 
    public Timestamp inscriptionDate; 
    public Timeline timeline;
}

我在数据库中保存了这样的游戏:

User user = Form.form(User.class).bindFromRequest().get();
user.save();

但我不想保存时间轴用户的字段。

有没有办法实现这个目标?

编辑1
我在想要的字段上试过@Transient,但没有效果。

编辑2
这是时间轴类:

import java.util.Collection;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

public class Timeline {

    public SortedSet<Event> events;
    public String familyName;    

    public Timeline(String familyName)
    {       
        this.events=new TreeSet<Event>(Event.getEventsComparator());
        this.familyName=familyName;
    }
// some other methods 
}

这是User类:

@Entity
public class User extends Model{

@Id
public int id;  
public String name; 
public String username; 
public String email; 
public String password; 
public Timestamp inscriptionDate;
@Transient
public Timeline timeline;

public User(){}

public User(String name, String email, String username, String password){
    this.name = name; 
    this.email = email; 
    this.username = username; 
    this.password = password; 
}

// Other methods ... 
}

编辑3
我使用这种方法在db中显示我的用户:

public static Result getUsers(){
        List<User> users = new Model.Finder(String.class, User.class).all(); 
        return ok(toJson(users)); 
    }

我认为这就是为什么我总是为null设置timeline字段。时间线实际上是保存在数据库中,对吗?

2 个答案:

答案 0 :(得分:2)

我在我的应用程序中成功使用了@Transient。

也许是一个导入问题:

import javax.persistence.Transient

不是

import java.beans.Transient

修改2

数据库中的排除字段:@Transient正常工作

在json中排除字段:它存在的解决方案很少,view是一个

答案 1 :(得分:0)

将数据直接从请求(表单)绑定到数据库实体类是一种安全漏洞。您可能希望将其绑定到POJO类,必要时执行验证,然后自己使用请求数据填充User.class