如果我只知道外键id而不是完整实体,如何用外键保存对象?

时间:2017-09-07 14:49:00

标签: java mysql json hibernate

我正在努力将现有项目转换为使用Hibernate。我正在使用Mysql作为数据库。我有一个这样的课:

@Entity
@Table(name = "user")
public class User {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "user_id")
   private Long userId;

   @ManyToOne
   @JoinColumn(name = "group_id_user")
   private Group group;

   @Column(name = "name")
   private String name;

   ...
   // getters and setters....   
}

和这样的课程:

@Entity
@Table(name = "group")
public class Group {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "group_id")
   private Long groupId;

   @Column(name="group_name")
   private String groupName;

   ...
   // getters and setters....   
}

我在尝试将用户添加到数据库时遇到了问题。客户端正在以JSON格式发送数据,例如:

{
   "user":
   {
      "name": "John",
      "groupId": 3
   }
}

此格式与user表格匹配,该表格包含user_idgroup_idusername列。我曾经能够使用下面的代码将JSON对象直接转换为User对象:

Gson gson = new GsonBuilder().create();
User user = gson.fromJson(userJSON.toString(), User.class);

但是现在我正在使用Hibernate,我的User类没有名为groupId的成员变量。相反,它有一个名为Group的{​​{1}}类型的成员变量。上面的代码创建了一个没有group成员的User对象,当我将其保存到数据库时,列group被设置为null。

是否有一种好的/简单的方法来创建一个{J}对象,可以使用group_id而不是实际的User从JSON对象保存到数据库中对象?

我不认为必须更改客户端发送到服务器的JSON对象是个好主意。另外我希望我不必解析JSON对象来获取groupId,然后执行查询以从数据库中获取Group对象,然后使用该groupId对象以及用于创建要保存的Group对象的JSON对象。

0 个答案:

没有答案