如何调用以及如何解决我在API上的下一个问题。我必须返回具有不同视图的同一对象。某些数据不应返回给用户。这是一个例子: 父:
public class OrginalObject{
private int id;
private String name;
private String surname;
private int age;
private String school;
private String secret;
private Address Address;
子:
public class Address{
private int id;
private String street;
private String zipCode;
private String Country;
如果我想加载完整对象列表,我会打电话:
session.createCriteria(OrginalObject.class).list();
1。)但如果不想让别人知道我的财产秘密,我需要隐藏它。但我不知道如何从数据库中调用它所拥有的所有其他属性。类似的东西:
session.createCriteria(OrginalObjectPublic.class).list();
2。)另外我想选择只加载“重要”数据。这仅表示属性id, name, school
。
session.createCriteria(OrginalObjectImportant.class).list();
有没有办法做一个适配器/“自定义视图”直接从数据库加载它?我知道我可以编写纯sql,但我想在具有20多个具有嵌套列表/对象的属性的对象上使用它。
3。)此外,如何使用此转换仅加载嵌套对象的少数属性与原始对象的属性。示例json(仅来自OrginalOBject的id,name,school和来自Address:
的街道{
"id": 1,
"name": "testname",
"school": "testschool",
"Address": {
{
"id": 33,
"street": "testStreet 33"
}
}
4。)如果Address是数组,还可以在嵌套列表中使用它:
public class OrginalObject{
...
private List<Address> AddressList;
答案 0 :(得分:1)
由于hibernate是一个持久性框架,你不能保存/持久化到视图,这是不可能的。是的,你可以创建一个像表一样的名称的视图,而不喜欢视图,但你将无法再存储到该实体。
答案 1 :(得分:1)
首先没有人可以访问你的秘密, 只有你应该看到它的程序员。 第二,如果没有人应该拥有它为什么存储它。 如果你想把它拉出来,你可以使用继承。
之类的东西public abstract PublicObject {
...
}
public OriginalObject extends PublicObject {
String secret;
}
编辑: 第二&amp;你可以用hql解决它们的第四个问题:
String hql = "SELECT O.id, O.name, O.school FROM OrginalObject O";
Query query = session.createQuery(hql);
List results = query.list();
至于你的第3个问题,这取决于你的api。例如,如果您使用杰克逊,可以使用@JsonIgnore
答案 2 :(得分:1)
您可以将多个实体映射到同一个表,每个实体都包含您要公开的属性集。 看看this question.