当前位置: 首页 > 知识库问答 >
问题:

Spring Data Rest&JPA--当实体被方法注释时不呈现结果(通过字段注释工作)

昌乐生
2023-03-14

我正在尝试让Spring Data Rest与我的实体一起工作。我实现了存储库,并且在请求localhost:8080时可以看到可用存储库的列表。

但是,当试图通过REST接口执行任何存储库查询时(例如,通过localhost:8080/users执行findAll),响应是空的。我将该问题追溯到以下几个方面:

另外,有谁知道如何更好地配置系统以更好地处理异常,从而使这些错误不会如此悄无声息地降低?

更多字段和方法之间的不一致:

我还发现,必须为所有字段实现setter和getter,以便在结果JSON中呈现它们。但是,对于非基本字段(例如托管bean),名称是从字段名称中提取的,而不是从属性中提取的(就像在基本字段中一样)。

  @Entity
  class  User
  {

    @Id
    long Id;
    String firstNameField;
    String lastNameField;
    Account accountField;   //a managed bean

    long getId() ...
    String getFirstName() ...
    String getLastName() ....
    Account getAccount()  ....

}
    {
        firstName: "..."
        lastName: "....."
        accountField:  ".....link..."
      }

好的,这里有一个具体的例子:

/***/

@entity@table(name=“users”,schema=“cars”,catalog=“”)公共类用户{

private int userId;
private String firstName;
private String lastName;
private String password;
private String email;

//todo: Ugh, this is odd...Spring data rest does not seem to render links to ManyToMany properties using method annotation...must add it to the field declaration...removing this from here will result in removing the property from the rest response...needs further investigation
@ManyToMany
@JoinTable (name = "USER_ROLE",
            joinColumns = @JoinColumn(updatable = false, insertable = false, name = "USER_ID", referencedColumnName = "USER_ID"),
            inverseJoinColumns = @JoinColumn(updatable = false, insertable = false, name = "ROLE_ID", referencedColumnName = "ROLE_ID"))
private Collection<Role> roles;



@Id
@Column (name = "USER_ID")
public int getUserId()
{
    return userId;
}


public void setUserId(int inUserId)
{
    userId = inUserId;
}


@Basic
@Column (name = "FIRST_NAME")
public String getFirstName()
{
    return firstName;
}


public void setFirstName(String inFirstName)
{
    firstName = inFirstName;
}


@Basic
@Column (name = "LAST_NAME")
public String getLastName()
{
    return lastName;
}


public void setLastName(String inLastName)
{
    lastName = inLastName;
}


@Basic
@Column (name = "PASSWORD")
public String getPassword()
{
    return password;
}


public void setPassword(String inPassword)
{
    password = inPassword;
}



@Override
public boolean equals(Object o)
{
    ...........
}


@Override
public int hashCode()
{
    ......
}


@ManyToMany
@JoinTable (name = "USER_ROLE",
           joinColumns = @JoinColumn(updatable = false, insertable = false, name = "USER_ID", referencedColumnName = "USER_ID"),
           inverseJoinColumns = @JoinColumn(updatable = false, insertable = false, name = "ROLE_ID", referencedColumnName = "ROLE_ID"))
private Collection<Role> getRoles()
{
    return roles;
}


private void setRoles(Collection<Role> inRoles)
{
    roles = inRoles;
}
@Override
public int hashCode()
{
    ......
}

}

共有1个答案

王子明
2023-03-14

您需要实现getter和setter并注释主键。指南中有几个很好的例子。

 类似资料:
  • 我用lombook注释了实体类(https://projectlombok.org/features/all): 我有使用这个实体从数据库中给我数据的服务。最后我尝试从会员对象中获取一些数据 但我在成员对象中没有任何getter。当我写我有错误(IDEA建议我创建getter'getName()')。如何将lombook与jpa实体一起使用?如何访问用lombok注释(如@Getter或@Sett

  • 问题内容: 我有一个关于Hibernate使用的简单问题。我通过注释类的字段以及注释相应bean的get方法,以两种方式之一不断看到人们使用JPA注释。 我的问题如下:使用JPA注释(例如@Id),注释字段和bean方法之间是否有区别? 例: - - - - - -要么 - - - - - - 问题答案: 是的,我相信您想搜索现场访问与财产访问: 休眠注释-字段访问或属性访问哪个更好? Sprin

  • 问题内容: 我有一个关于Hibernate使用的简单问题。我通过注释类的字段以及注释相应bean的get方法,以两种方式之一不断看到人们使用JPA注释。 我的问题如下:使用JPA注释,例如@Id,注释字段和bean方法之间是否有区别。 例: - - - - - -要么 - - - - - - 问题答案: Spring首选项是字段访问。这就是我所遵循的。

  • 问题内容: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 问题答案: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 否。如果要定义表和列注释,最好的选择是在生成的DDL中根据事实进行操作,然后再对数据库执行操作。

  • 问题内容: 一个运行了几个月的应用程序已经停止使用已经有几个月历史的JPA 批注。在进行集成测试时,我看到许多“ ”类型错误。 我不清楚这里出了什么问题。 我没有文件,因为我正在使用hibernate实体管理器。由于我仅使用注释,因此我的实体没有.hbm.xml文件。我的文件很小,可以正常保存。 我显然丢失了一些东西,但不能动弹。 我正在使用hibernate批注3.2.1,hibernate-e

  • 是否可能在已注释的字段内接收注释值?假设我有这个界面: 我有这样的实施: 我想了解的是:是否可以在MyClass中接收MyAnnoation的值?我想在MyClass类中实现一个方法,它将返回一个分配注释的值。所以,将返回“Annoation”。如果不可能,请通知我。