从 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 数据库,并且应该使用浏览器打开该链接