Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAXB+;JPA&x2B;JAX-RS、JAXB注释问题_Jpa_Jakarta Ee_Jaxb - Fatal编程技术网

JAXB+;JPA&x2B;JAX-RS、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

你好,请原谅我的英语

假设我有一个名为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"),
});
@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提供商,则还可以执行以下操作:


执行namedquery“Person.selectAll”时使用@XmlTransient注释,xml输出不包含
标记。我以为您希望排除姓氏标记。你的问题是“没有标签”。好的,thx@Blaise,我已经使用
@FetchGroup
注释解决了JPA实体人员必须实现FetchGroupTracker的问题