我使用Java Persistence,我想要一个web方法来返回Entity类的“部分”。例如,我有一个Customer类,它表示Customer表中包含许多字段的记录,但我想只返回其中的一些。是否可以使用映射来做到这一点?或者唯一的方法是创建一个只有我想要返回的字段的新类(可能是Customer的超类)?我尝试过绑定,但它没有用(显然我是以错误的方式做到的):
@Entity
@Table(name = "Customer", catalog = "test", schema = "")
@XmlType(name = "Customer")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
@XmlElement
private Integer accountId;
@Basic(optional = false)
@Column(name = "username")
@XmlElement
private String username;
@Basic(optional = false)
@Column(name = "password")
private String password;
我认为如果我不将@XmlElement注释添加到密码字段,它将不会包含在结果中。但是,我在部署期间得到了一堆“类有两个相同名称的属性”错误。
答案 0 :(得分:3)
这是因为XML生成的默认行为是PUBLIC_MEMBER(http://java.sun.com/javaee/5/docs/api/javax/xml/bind/annotation/XmlAccessorType.html)。
由于您将@XmlElement放在字段上,因此它会抓取您的公共getter / setter方法和任何带有@XmlElement的字段。你可能想要的是将XmlAccessorType设置为FIELD或NONE。
答案 1 :(得分:2)
使用
注释班级@XmlAccessorType(XmlAccessType.NONE)
然后使用
注释要发送的字段@XmlElement(name="field_name")
实际上有一个JAXB问题(我现在找不到引用)基本上说如果你要从XML读取,你会想要注释 setter 而不是田野本身。