3

xmlストリームのマーシャリングを解除するために使用しているJAXB/Entityオブジェクトのライブラリがあります。Java SEアプリケーションとして実行するだけで、問題なく実行できます。Netbeans6.9とGlassfish3.01を使用してすべてをJavaEEアプリに移行しました。現在、次のようないくつかの例外が発生しています。

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 19 counts of IllegalAnnotationExceptions
Property _persistence_productBase_vh is present but not specified in @XmlType.propOrder
        this problem is related to the following location:
                at protected org.eclipse.persistence.indirection.WeavedAttributeValueHolderInterface entitiesjaxb.cmic.ajrs.com.ProductSorts._persistence_productBase_vh
                at entitiesjaxb.cmic.ajrs.com.ProductSorts
                at public entitiesjaxb.cmic.ajrs.com.ProductSorts entitiesjaxb.cmic.ajrs.com.ObjectFactory.createProductSorts()
                at entitiesjaxb.cmic.ajrs.com.ObjectFactory

私の問題は、enties/jaxbファイルのどこにもxml要素または変数_persistence_productBase_vhがないことです。これはGlassfishとEclipseLinkによって追加されていると思います。これらのプロパティを無視する方法を知っている人はいますか?これがエンティティとxmlのサンプルです。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ProductSorts", propOrder = {
    "pkId",
    "productBase",
    "field",
    "value",
    "ts"
})

@Entity
@Table(name = "product_sorts")
@NamedQueries({
    //@NamedQuery(name = "ProductSorts.findAll", query = "SELECT p FROM ProductSorts p"),
    @NamedQuery(name = "ProductSorts.findByPkId", query = "SELECT p FROM ProductSorts p WHERE p.pkId = :pkId"),
    @NamedQuery(name = "ProductSorts.findByField", query = "SELECT p FROM ProductSorts p WHERE p.field = :field"),
    @NamedQuery(name = "ProductSorts.findByValue", query = "SELECT p FROM ProductSorts p WHERE p.value = :value"),
    @NamedQuery(name = "ProductSorts.findByTs", query = "SELECT p FROM ProductSorts p WHERE p.ts = :ts")})
public class ProductSorts implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "pk_id")
    private Integer pkId;
    @Column(name = "field")
    @XmlElement(name = "Field")
    private String field;
    @Column(name = "value")
    @XmlElement(name = "Value")
    private String value;
    @Basic(optional = false)
    @Column(name = "ts")
    @Temporal(TemporalType.TIMESTAMP)
    @XmlElement(required = true)
    @XmlSchemaType(name = "dateTime")
    private Date ts;
    @JoinColumn(name = "pk_product", referencedColumnName = "pk_id")
    @ManyToOne(fetch = FetchType.LAZY)
    private ProductBase productBase;

    public ProductSorts() {
    }

    public ProductSorts(Integer pkId) {
        this.pkId = pkId;
    }



<ProductSorts>
  <pkID>317926</pkID>
  <pkProduct>118647</pkProduct>
  <Field>3D TECHNOLOGY</Field>
  <Value>No</Value>
  <ts>1970-01-13T00:43:15.947</ts>
</ProductSorts>
4

1 に答える 1

1

このプロパティ(_persistence_productBase_vh)は、JPAエンティティに組み込まれています。この問題を回避するには、JAXBマッピングでプロパティアクセスを使用できます。

@XmlAccessorType(XmlAccessType.PROPERTY)

EclipseLinkがバイトコードウィービングを実行すると、クラスパスでJAXBがチェックされます。JAXBが存在する場合、そのプロパティに@XmlTransientアノテーションが織り込まれます。静的または動的な織りを使用していますか?静的ウィービングを使用している場合は、JAXBAPIjarがクラスパス上にあることを確認する必要があります。

于 2011-04-18T17:21:47.323 に答える