0

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'productId3' in 'where clause'このクエリを実行しようとすると、エラーが発生します。

public Vendor getVendorId(ProductInfo productInfo) { 
        return (Vendor) this.sessionFactory
                .getCurrentSession()
                .createQuery(
                        "select vendorId from Product where productId3 = :id")
                .setParameter("id", productInfo).uniqueResult();
    }

クラス Product は次のようになります。

@Entity
@Table(name="PRODUCT")
public class Product{

    @Id
    @GeneratedValue
    @Column(name="PRODUCT_ID2")
    private Integer productId2;

    public void setProductId2(Integer productId2){
        this.productId2 = productId2;
    }

    public Integer getProductId2(){
        return productId2;
    }

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="PRODUCT_ID3")
    private ProductInfo productId3;

    public void setProductId3(ProductInfo productId3){
        this.productId3 = productId3;
    }

    public ProductInfo getProductId3(){
        return productId3;
    }

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="VENDOR_ID")
    private Vendor vendorId;

    public void setVendorId(Vendor vendorId){
        this.vendorId = vendorId;
    }

    public Vendor getVendorId(){
        return vendorId;
    }

    @OneToMany(mappedBy="productId2")
    private Set<ProductRevision> productRevisions;

    public void setProductRevisions(Set<ProductRevision> productRevisions){
        this.productRevisions = productRevisions;
    }

    public Set<ProductRevision> getProductRevisions(){
        return productRevisions;
    }
}

なぜこのエラーが発生するのですか? 名前がまったく同じであるため、列が見つからない理由がわかりません。ご協力いただきありがとうございます!

/D

4

2 に答える 2

1

次のクエリを使用します。

select p.vendorId from Product p where p.productId3 = :id
于 2012-06-18T10:06:02.343 に答える
0

うるさい応答を許してください。しかし、HQL をより明確にする 1 つのことは、Productクラスのフィールドの名前を変更することです。

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="PRODUCT_ID3")
    private ProductInfo productInfo;

    public void setProductInfo(ProductInfo productInfo){
        this.productInfo = productInfo;
    }

フィールドについても同様ですvendorId。その後、HQL の読み取りが大幅に改善されます。SQL列ではなくエンティティを扱っていることは明らかです。

    public Vendor getVendorId(ProductInfo productInfo) { 
        return (Vendor) this.sessionFactory
            .getCurrentSession()
            .createQuery(
                    "select p.vendor from Product where productInfo = :productInfo")
            .setParameter("productInfo", productInfo).uniqueResult();
    }
于 2012-06-18T13:44:17.877 に答える