Hibernate - 一对多关系 - 只有id

时间:2015-09-25 13:27:21

标签: java spring hibernate

我有两个类,其中一个是OneToMany。它工作正常,但我只想保存用户的ID。

数据类:

public class Data {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;

@NotEmpty
private String phoneName;

@NotEmpty
private String phoneId;

@NotEmpty
private String phoneNumber;

@ManyToOne
@JoinColumn(name="user_id")
private User userId;

和用户类:

@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;

@NotEmpty
private String userEmail;

@NotEmpty
private String password;

当我查询时,我也得到了用户的所有数据:

[
 {
  "id": 10,
  "phoneName": "SOME CRAZY NAME",
  "phoneId": "165464646464",
  "phoneNumber": "040435005",
  "userId": {
   "userEmail": "xxx@gmail.com",
   "password": "secret",
   "id": 3
  }
 }
]

但我想只获得用户的ID,没有电子邮件和密码。有没有其他方法来注释@OneToMany来实现这一目标?

1 个答案:

答案 0 :(得分:0)

您不希望将该属性命名为userId,您希望将其命名为user并保留整个用户对象,这是hibernate的功能。只有在您自己进行数据库事务时,才能简单地处理ID。

所以你想要: 1。 变化

@ManyToOne
@JoinColumn(name="user_id")
private User userId;

@ManyToOne
private User user;

如果您遵循适当的约定(您应该这样做,它会使这更容易),您不需要加入列。

2:

在用户类更改

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

当您想要访问用户ID时,可以使用data.user.id

3:

如果你真的需要隐藏用户名和密码(显然你需要隐藏密码)。然后你需要研究JSON序列化,有一些框架可以让它更容易。就像Jackson有@JsonView和@JsonIgnore注释一样可以帮到你。如果在前端从不需要@fsonIgnore,则只对其使用@JsonIgnore。否则,请查看@JsonView的工作原理(它相当简单),并为每个包含@JsonView注释的控制器指定要序列化的属性

希望这有帮助