Java JPA CDI JAXB-Setter被忽略

Java JPA CDI JAXB-Setter被忽略,java,jakarta-ee,jpa-2.0,java-ee-6,openjpa,Java,Jakarta Ee,Jpa 2.0,Java Ee 6,Openjpa,我的JAX-RS资源正在成功地从数据库获取JPA/JAXB实体和JPA/JAXB实体列表 一个实体作为父实体。实体列表是父实体中的一个字段。我无法将父实体的列表设置为返回的实体列表。父实体在JAXB父实体中返回,但这并不影响情况 代码如下: @Inject InventoryService inventoryService; @Inject HcUser user; @Inject InventoryResponse inventoryResponse; @GET @Produces(Medi

我的JAX-RS资源正在成功地从数据库获取JPA/JAXB实体和JPA/JAXB实体列表

一个实体作为父实体。实体列表是父实体中的一个字段。我无法将父实体的列表设置为返回的实体列表。父实体在JAXB父实体中返回,但这并不影响情况

代码如下:

@Inject
InventoryService inventoryService;
@Inject
HcUser user;
@Inject
InventoryResponse inventoryResponse;

@GET
@Produces(MediaType.APPLICATION_JSON)
public InventoryResponse getInventory(@Context HttpServletRequest request, 
                                      @HeaderParam(IDENTITY_URL) String identityURL, 
                                      @HeaderParam(ACCESS_TOKEN) String accessToken) {

    String username = (String) request.getAttribute("username");
    user = inventoryService.getUserById(username);
    user.setHcCounts(inventoryService.getCountsForUserId(username));
    inventoryResponse.setUser(user);

    return inventoryResponse;
}
返回的JSON仅返回用户对象。我尝试手动实例化一个用户对象,并将其设置为getUserById方法的返回值,然后使用返回的列表调用setHcCounts。但是,setter仍然被忽略

我做错了什么

我使用的是WASV8.0.0.8。堆栈是:

JAX-RS
-ApacheWinkV1.1.1(由WAS8提供)

OpenJPA
-apachev2.1.2-SNAPSHOT(由was8提供)

JAXB
-MOXy v2.7

CDI
-Apache OpenWebBeans 1.0(由WAS 8提供)

EJB
-apacheopenejb(由was8提供)

更新1 这是请求的InventoryResponse类,但是我认为没有必要。在调试过程中,在检查用户对象时,
inventoryResonse.setUser(user)
前面的行上,hcCounts为null

@Named
@RequestScoped
@XmlRootElement
public class InventoryResponse implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    private HcUser user;

    private List<HcLocation> locations;

    public HcUser getUser() {
        return user;
    }

    public void setUser(HcUser user) {
        this.user = user;
    }

    public List<HcLocation> getLocations() {
        return locations;
    }

    public void setLocations(List<HcLocation> locations) {
        this.locations = locations;
    }
}
@Named
@请求范围
@XmlRootElement
公共类InventoryResponse实现可序列化{
私有静态最终长serialVersionUID=1L;
@注入
私人用户;
私人名单地点;
公共HcUser getUser(){
返回用户;
}
公共void setUser(HcUser用户){
this.user=用户;
}
公共列表getLocations(){
返回地点;
}
公共位置(列出位置){
这个位置=位置;
}
}
更新2 根据要求,HcUser:

import java.io.Serializable;

import javax.inject.Named;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import java.util.Date;
import java.util.List;


@Entity
@Table(schema="<ommitted>", name="<ommitted>")
@Named
@XmlRootElement
public class HcUser implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false, length=100)
private String id;

@Column(nullable=false, length=1)
private boolean active;

@Temporal(TemporalType.DATE)
@Column(name="CREATE_DATE")
private Date createDate;

@Column(name="FIRST_NAME", length=100)
private String firstName;

@Column(name="LAST_NAME", length=100)
private String lastName;

@Temporal(TemporalType.DATE)
@Column(name="UPDATE_DATE")
private Date updateDate;

//bi-directional many-to-one association to HcAssignment
@OneToMany(mappedBy="hcUser")
@XmlElement
private List<HcAssignment> hcAssignments;

//bi-directional many-to-one association to HcCount
@OneToMany(mappedBy="hcUser")
@XmlElement
private List<HcCount> hcCounts;

public HcUser() {
}

public String getId() {
    return this.id;
}

public void setId(String id) {
    this.id = id;
}

public boolean getActive() {
    return this.active;
}

public void setActive(boolean active) {
    this.active = active;
}

public Date getCreateDate() {
    return this.createDate;
}

public void setCreateDate(Date createDate) {
    this.createDate = createDate;
}

public String getFirstName() {
    return this.firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return this.lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public Date getUpdateDate() {
    return this.updateDate;
}

public void setUpdateDate(Date updateDate) {
    this.updateDate = updateDate;
}

public List<HcAssignment> getHcAssignments() {
    return this.hcAssignments;
}

public void setHcAssignments(List<HcAssignment> hcAssignments) {
    this.hcAssignments = hcAssignments;
}

public HcAssignment addHcAssignment(HcAssignment hcAssignment) {
    getHcAssignments().add(hcAssignment);
    hcAssignment.setHcUser(this);

    return hcAssignment;
}

public HcAssignment removeHcAssignment(HcAssignment hcAssignment) {
    getHcAssignments().remove(hcAssignment);
    hcAssignment.setHcUser(null);

    return hcAssignment;
}

public List<HcCount> getHcCounts() {
    return this.hcCounts;
}

public void setHcCounts(List<HcCount> hcCounts) {
    this.hcCounts = hcCounts;
}

public HcCount addHcCount(HcCount hcCount) {
    getHcCounts().add(hcCount);
    hcCount.setHcUser(this);

    return hcCount;
}

public HcCount removeHcCount(HcCount hcCount) {
    getHcCounts().remove(hcCount);
    hcCount.setHcUser(null);

    return hcCount;
}

/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}

/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (!(obj instanceof HcUser)) {
        return false;
    }
    HcUser other = (HcUser) obj;
    if (id == null) {
        if (other.id != null) {
            return false;
        }
    } else if (!id.equals(other.id)) {
        return false;
    }
    return true;
}
}
import java.io.Serializable;
导入javax.inject.Named;
导入javax.persistence.*;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
导入java.util.Date;
导入java.util.List;
@实体
@表(schema=“”,name=“”)
@命名
@XmlRootElement
公共类HcUser实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(unique=true,nullable=false,length=100)
私有字符串id;
@列(nullable=false,长度=1)
私有布尔活动;
@时态(TemporalType.DATE)
@列(name=“创建日期”)
私人日期;
@列(name=“FIRST_name”,长度=100)
私有字符串名;
@列(name=“LAST_name”,长度=100)
私有字符串lastName;
@时态(TemporalType.DATE)
@列(name=“更新日期”)
私人日期更新日期;
//双向多对一关联到HCM分配
@OneToMany(mappedBy=“hcUser”)
@XmlElement
私人转让清单;
//与HcCount的双向多对一关联
@OneToMany(mappedBy=“hcUser”)
@XmlElement
私人名单;
公共用户(){
}
公共字符串getId(){
返回此.id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共布尔getActive(){
返回此.active;
}
public void setActive(布尔激活){
这个.active=active;
}
公共日期getCreateDate(){
返回此.createDate;
}
公共无效setCreateDate(日期createDate){
this.createDate=createDate;
}
公共字符串getFirstName(){
返回这个.firstName;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回this.lastName;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共日期getUpdateDate(){
返回此.updateDate;
}
公共无效设置日期日期(日期更新日期){
this.updateDate=updateDate;
}
公共列表getHcAssignments(){
返回此.hc作业;
}
公共无效设置hcAssignments(列表hcAssignments){
this.hcAssignments=hcAssignments;
}
公共HcAssignment addHcAssignment(HcAssignment-HcAssignment){
getHcAssignments().add(hcAssignment);
hcAssignment.setHcUser(此);
返回任务;
}
公共HcAssignment removeHcAssignment(HcAssignment HcAssignment){
getHcAssignments()。删除(hcAssignment);
hcAssignment.setHcUser(空);
返回任务;
}
公共列表getHcCounts(){
返回此.hcCounts;
}
公共无效集合hcCounts(列表hcCounts){
this.hcCounts=hcCounts;
}
公共HcCount addHcCount(HcCount HcCount){
getHcCounts().add(hcCount);
hcCount.setHcUser(此);
返回hcCount;
}
公共HcCount removeHcCount(HcCount HcCount){
getHcCounts().remove(hcCount);
hcCount.setHcUser(空);
返回hcCount;
}
/*(非Javadoc)
*@see java.lang.Object#hashCode()
*/
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
result=prime*result+((id==null)?0:id.hashCode();
返回结果;
}
/*(非Javadoc)
*@see java.lang.Object#equals(java.lang.Object)
*/
@凌驾
公共布尔等于(对象obj){
if(this==obj){
返回true;
}
if(obj==null){
返回false;
}
如果(!(HcUser的obj实例)){
返回false;
}
HcUser other=(HcUser)obj;
if(id==null){
if(other.id!=null){
返回false;
}
}如果(!id.equals(other.id)){
返回false;
}
返回true;
}
}
更新3 以下是HcCount的代码:

import java.io.Serializable;

import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.eclipse.persistence.oxm.annotations.XmlInverseReference;

import java.math.BigDecimal;
import java.util.Date;

@Entity
@Table(schema="<omitted>", name="<omitted>")
@Named
@XmlRootElement
public class HcCount implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@SequenceGenerator(name="HC_COUNT_ID_GENERATOR", sequenceName="COUNT_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HC_COUNT_ID_GENERATOR")
@Column(unique=true, nullable=false)
private long id;

@Column(name = "LOCATION_NUM", nullable = false, length = 100)
private String locationNum;

@Column(name = "PRODUCT_CODE", nullable = false, length = 100)
private String productCode;

@Column(name = "USER_ID", nullable = false, length = 100)
private String userId;

@Column(name = "LOT_CODE", nullable = false, length = 100)
private String lotCode;

@Column(name="\"COUNT\"")
private BigDecimal count;

@Temporal(TemporalType.DATE)
@Column(name="COUNT_DATE", unique=true, nullable=false)
private Date countDate;

@Temporal(TemporalType.DATE)
@Column(name="CREATE_DATE")
private Date createDate;

@Temporal(TemporalType.DATE)
@Column(name="UPDATE_DATE")
private Date updateDate;

//bi-directional many-to-one association to HcUser
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="USER_ID", unique=true, nullable=false)
@XmlElement
@XmlInverseReference(mappedBy="hcCounts")
@Inject private HcUser hcUser;

//bi-directional many-to-one association to HcLocation
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="LOCATION_NUM", referencedColumnName="NUM", unique=true, nullable=false)
@XmlElement
@XmlInverseReference(mappedBy="hcCounts")
@Inject private HcLocation hcLocation;

//bi-directional many-to-one association to HcProduct
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="PRODUCT_CODE", referencedColumnName="CODE_ID", unique=true, nullable=false)
@XmlElement
@XmlInverseReference(mappedBy="hcCounts")
@Inject private HcProduct hcProduct;

//bi-directional many-to-one association to HcLot
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="LOT_CODE", referencedColumnName="CODE_ID", unique=true, nullable=false)
@XmlElement
@XmlInverseReference(mappedBy="hcCounts")
@Inject private HcLot hcLot;

public HcCount() {
}

public long getId() {
    return this.id;
}

public void setId(long id) {
    this.id = id;
}

public String getLocationNum() {
    return locationNum;
}

public void setLocationNum(String locationNum) {
    this.locationNum = locationNum;
}

public String getProductCode() {
    return productCode;
}

public void setProductCode(String productCode) {
    this.productCode = productCode;
}

public String getUserId() {
    return userId;
}

public void setUserId(String userId) {
    this.userId = userId;
}

public String getLotCode() {
    return lotCode;
}

public void setLotCode(String lotCode) {
    this.lotCode = lotCode;
}

public BigDecimal getCount() {
    return this.count;
}

public void setCount(BigDecimal count) {
    this.count = count;
}

public Date getCountDate() {
    return this.countDate;
}

public void setCountDate(Date countDate) {
    this.countDate = countDate;
}

public Date getCreateDate() {
    return this.createDate;
}

public void setCreateDate(Date createDate) {
    this.createDate = createDate;
}

public Date getUpdateDate() {
    return this.updateDate;
}

public void setUpdateDate(Date updateDate) {
    this.updateDate = updateDate;
}

public HcUser getHcUser() {
    return this.hcUser;
}

public void setHcUser(HcUser hcUser) {
    this.hcUser = hcUser;
}

public HcLocation getHcLocation() {
    return this.hcLocation;
}

public void setHcLocation(HcLocation hcLocation) {
    this.hcLocation = hcLocation;
}

public HcProduct getHcProduct() {
    return this.hcProduct;
}

public void setHcProduct(HcProduct hcProduct) {
    this.hcProduct = hcProduct;
}

public HcLot getHcLot() {
    return this.hcLot;
}

public void setHcLot(HcLot hcLot) {
    this.hcLot = hcLot;
}

/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (int) (id ^ (id >>> 32));
    return result;
}

/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (!(obj instanceof HcCount)) {
        return false;
    }
    HcCount other = (HcCount) obj;
    if (id != other.id) {
        return false;
    }
    return true;
}
}
import java.io.Serializable;
导入javax.inject.inject;
导入javax.inject.Named;
导入javax.persistence.*;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
导入org.eclipse.persistence.oxm.annotations.xmlInversereReference;
导入java.math.BigDecimal;
导入java.util.Date;
@实体
@表(schema=“”,name=“”)
@命名
@XmlRootElement
公共类HcCount实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@SequenceGenerator(name=“HC\U公司
public InventoryResponse getInventory(@Context HttpServletRequest request, @HeaderParam(IDENTITY_URL) String identityURL, @HeaderParam(ACCESS_TOKEN) String accessToken) {
    String username = (String) request.getAttribute("username");
    user = inventoryService.getUserById(username);
    List<HcCount> counts = inventoryService.getCountsForUserId(username);
    HcUser newUser = new HcUser();
    newUser.setHcCounts(counts);
    inventoryResponse.setUser(newUser);

    return inventoryResponse;
}