JAXB+;JPA&x2B;JAX-RS、JAXB注释问题
你好,请原谅我的英语 假设我有一个名为query的实体,它选择带有jaxb注释的名称列JAXB+;JPA&x2B;JAX-RS、JAXB注释问题,jpa,jakarta-ee,jaxb,Jpa,Jakarta Ee,Jaxb,你好,请原谅我的英语 假设我有一个名为query的实体,它选择带有jaxb注释的名称列 @Entity @NamedQueries({ @NamedQuery(name = "Person.selectAll", query = "SELECT p FROM Form p"), @NamedQuery(name = "Person.selectName", query = "SELECT p.id,p.name FROM Form p"), }); @XmlRoo
@Entity
@NamedQueries({
@NamedQuery(name = "Person.selectAll", query = "SELECT p FROM Form p"),
@NamedQuery(name = "Person.selectName", query = "SELECT p.id,p.name FROM Form p"),
});
@XmlRootElement
public class Person implements Serializable {
@Id
@Column
private int id;
@XmlElement
private String name;
@Column
@XmlElement
private String surname;
..
}
假设现在我有一个Rest方法,它执行namedquery Person.selectName并返回响应的XML或JSON代码
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/list")
public List<Person> getList()
{
//here i execute the namedquery Person.selectName
List<Person> persons = executeNamedQuery().getList();
return persons;
}
@GET
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
@路径(“/list”)
公共列表getList()
{
//这里我执行namedquery Person.selectName
List persons=executeNamedQuery().getList();
返回人员;
}
现在问题是在编组过程中,因为name字段没有@XmlRootElement注释。
仅当执行namedquery Person.selectName时,我希望输出不带
标记的value1value2
。我不能使用@XmlTransient,因为namedquery“selectAll”需要它。
如何以“优雅的方式”解决问题?您可以在姓氏属性上使用JAXB@XmlTransient注释,而不会影响JPA命名查询的工作方式
@Column
@XmlTransient
private String surname;
更新
您可以通过创建一个新类PersonName来解决这个问题。这个类将只包含您想要用JAXB映射的字段。此类将由getList()方法返回,在该方法中,您需要将列表转换为List
如果您使用的是JPA提供商,则还可以执行以下操作:
标记。我以为您希望排除姓氏标记。你的问题是“没有标签”。好的,thx@Blaise,我已经使用@FetchGroup
注释解决了JPA实体人员必须实现FetchGroupTracker的问题