将不同JSON密钥的值设置为字段Play框架

时间:2016-02-05 19:01:35

标签: java sql json playframework ebean

我在play框架中创建一个REST服务,我有一条从请求中读取JSON的路由。 JSON采用以下格式:

{
"email":"test@test.com",
"password":"pw",
"address":{
"city":"cityName",
"country":"countryName"}
}

然后我使用user = Json.fromJson(json, User.class);将JSON解析为用户类。在我的数据库中,我必须使用一对一的关系表,如下所示:

用户:

EMAIL VARCHAR,
NAME STRING

地址:

EMAIL VARCHAR,
CITY VARCHAR,
ADDRESS VARCHAR

其中EMAIL是外键。

由于我收到的JSON只有5个​​值,当play框架将新记录保存到数据库时,在Address中它只保存CITY和ADDRESS,EMAIL字段保存为null。后来我无法检索相关用户记录的Address项的值,因为连接它们的外键保存为null。 (这些是SQL查询:)

是否有一些注释或其他方式如何将JSON中的电子邮件值用作地址表中的电子邮件值?

以下是我编写Model类的方法:

@Entity
@Table(name = "User")
public class User extends Model{
    @Id
    @Column(length = 80)
    private String email;
    @Column(length = 100)
    private String password;
    @OneToOne(cascade =  CascadeType.ALL, mappedBy = "user")
    private Address address;
}

@Entity
@Table(name = Address
public class Address extends Model{
    @OneToOne()
    @JoinColumn(name = "email")
    private User user;

    @Column(length = 100)
    private String city;
    @Column(length = 100)
    private String country;
}

1 个答案:

答案 0 :(得分:2)

为什么不先尝试保存地址,稍后当对象地址 ORM管理设置对象地址对象用户时并坚持使用对象。

这样的事情:

  • 将JSON解析为User对象
  • 解析用户对象地址
  • 坚持地址对象
  • 地址对象再次设置为用户对象
  • 坚持用户对象。

我希望这可以提供帮助。