2016-02-05 22 views
0

我在Play框架中创建了REST服务,并且我有一个从请求中读取JSON的路由。 JSON的格式如下:将不同的JSON密钥设置为字段的值Play框架

{ 
"email":"[email protected]", 
"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个​​值,当播放框架将新记录保存到数据库时,在Address中它只保存CITY和ADDRESS,并且EMAIL字段保存为空。之后我无法检索相关用户记录的Address项的值,因为连接它们的外键保存为空。 (这些是sql查询:)

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

这里是我写我的模型类:

@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; 
} 
+0

任何人都可以帮忙吗? – xpg94

回答

2

你为什么不尝试保存地址第一,后来当对象地址ORM集对象地址管理,以用户对象并坚持对象用户。

事情是这样的:

  • 解析JSON到用户对象
  • 用户解析对象得到地址
  • 坚持地址对象
  • 设置地址对象用户对象再次
  • 坚持用户对象。

我希望这可以帮助。

+0

谢谢你,我有点“盲目”不看这个解决方案。我在想,有些方法可以通过使用注释来解决它,而我没有想到其他的可能性。 – xpg94