gpt4 book ai didi

java - Hibernate - 如何加载同一对象的不同 View

转载 作者:行者123 更新时间:2023-12-01 21:08:40 27 4
gpt4 key购买 nike

这是如何调用的以及如何解决我的下一个 API 问题。我必须返回具有不同 View 的同一对象。某些数据不应返回给用户。这是示例:家长:

public class OrginalObject{
private int id;
private String name;
private String surname;
private int age;
private String school;
private String secret;
private Address Address;

child :

public class Address{
private int id;
private String street;
private String zipCode;
private String Country;

如果我想加载完整对象的列表,我会调用:

session.createCriteria(OrginalObject.class).list();

1.) 但如果不想让别人知道我的属性(property) secret ,我需要隐藏它。但我不知道如何从数据库中调用它,就像它拥有所有其他属性一样。像这样的东西:

session.createCriteria(OrginalObjectPublic.class).list();

2.) 另外,我希望可以选择仅加载“重要”数据。这意味着只有属性id、name、school

session.createCriteria(OrginalObjectImportant.class).list();

有没有办法让适配器/“自定义 View ”直接从数据库加载它?我知道我可以编写纯 sql,但我想在具有 20 多个具有嵌套列表/对象的属性的对象上使用它。

3.) 另外,如何使用此转换仅加载嵌套对象的少数属性与原始属性。示例 json(仅 OrginalOBject 中的 id、姓名、学校和地址中的 id、街道:

{
"id": 1,
"name": "testname",
"school": "testschool",
"Address": {
{
"id": 33,
"street": "testStreet 33"
}
}

4.) 如果地址是数组,如何在嵌套列表上使用它:

public class OrginalObject{
...
private List<Address> AddressList;

最佳答案

由于 hibernate 是一个持久化框架,并且您无法保存/持久化到 View ,因此这是不可能的。是的,您可以创建一个名称类似于表的 View ,并且更喜欢该 View ,但您将无法再存储到该实体。

  1. 您可以从实体中删除 getter (getSecret)。因此数据库仍然有该字段,但您的实体不知道它。如果您尝试使用该实体存储数据,这可能会导致问题,您可能无法设置 secret 。
  2. 您可以将 getter 设置为默认值(程序包级别访问)并密封程序包,以便除了密封的项目之外没有其他人可以访问该 getter。
  3. 您可以使用spring's method authorization mechanism

关于java - Hibernate - 如何加载同一对象的不同 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com