我有两个类,其中一个是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来实现这一目标?
答案 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注释的控制器指定要序列化的属性
希望这有帮助