从 Ebean 中排除字段以将其保存在数据库中

Posted

技术标签:

【中文标题】从 Ebean 中排除字段以将其保存在数据库中【英文标题】:Exclude fields from Ebean to save it in DB 【发布时间】:2015-02-05 13:46:54 【问题描述】:

我有一个 用户 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 这是 Timeline 类:

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 

这里是用户类:

@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 我使用这种方法在数据库中显示了我的用户:

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

我认为这就是为什么我总是为timeline 设置一个null 字段。时间线实际上没有保存在 DB 中,对吗?

【问题讨论】:

【参考方案1】:

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

也许是进口问题:

import javax.persistence.Transient

不是

import java.beans.Transient

编辑 2

在 DB 中排除字段:@Transient 有效

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

【讨论】:

是否可以通过示例获得更多代码、整个类(时间轴、用户)? 我在问题中编辑了我的代码(参见编辑 2)。谢谢! 我在我的项目中复制代码,它的工作。即使没有@Transient。 在我的项目中,为了在用户中保存时间线,时间线类必须扩展模型并且@ManyToOne 注释必须存在于用户类的字段时间线上 能否添加1.sql相关文件的一部分【参考方案2】:

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

【讨论】:

我做到了,但同样的问题,它保存了一个时间线。所以,我真的必须明确地将时间线声明为“不可保存”

以上是关于从 Ebean 中排除字段以将其保存在数据库中的主要内容,如果未能解决你的问题,请参考以下文章

包 io.ebean 不存在 Play Framework 2.7

Firebase读取/保存数据以将其用作列表|斯威夫特/火力地堡

在 Flutter 中的 TextFormField 中,用户输入一个 url 或网站链接以将其保存到 firebase 数据库,并且应该使用浏览器打开该链接

如何从 SORM 表定义中排除类字段?

获取使用 Ebean 在 Play Framework 中保存的最新更新行

Firebase update() - 排除字段