使用Spring数据我希望能够在域模型类中定义自定义get方法,而不会影响模型本身。例如,使用此模型:
@Document
public class Person
{
private String firstName;
private String lastName;
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
}
到目前为止,Eveything工作得很好:模型人物有字段' firstName'和' lastName'我可以成功地拯救一个人#39;生成的JSON包含字段" firstName'和' lastName'。现在我想在JSON中添加一些额外的数据,而不会影响模型及其保存操作,如下所示:
@Document
public class Person
{
private String firstName;
private String lastName;
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
// custom method
public String getFullName()
{
return firstName+" "+lastName;
}
}
JSON应该包含与以前相同的数据,但这次也是一个额外的' fullName' -field。但是,与此同时,数据模型假设了一个额外的字段" fullName'在保存到数据库中时添加并填充空值。
我已经尝试过像@Transient这样的注释,但这不起作用。 documentation状态"默认情况下,所有私有字段都映射到文档,此批注将排除应用它的字段排除在数据库"之外,因此它只能应用于私有字段在课堂上,而不是get-methods。
在Spring中执行此操作的正确方法是什么?当然我可以扩展类Person并在那里包含getFullName方法,但我想知道是否可以在一个类中包含所有内容。
编辑:
我使用spring-data-elasticsearch 1.2.0.RELEASE将Elasticsearch用作数据库引擎。我刚刚测试了MongoDB作为替代品,然后它工作正常,即使没有@Transient注释。我认为ElasticsearchRepository的索引方法是在将提供的类实例保存到数据库时序列化它。这样,JSON输出和保存的数据总是相同的。有什么建议吗?