2012-06-18 3 views
0

я получаю ошибку com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'productId3' in 'where clause' при попытке запустить этот запрос:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Неизвестный столбец «productId3» в «где предложение»

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

выглядит Класс продукт, как это :

@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

+0

Вы можете начать с установки параметра showSql с помощью 1 и проверки выходного запроса и отправки его здесь. – MahdeTo

ответ

1

Используйте этот запрос:

select p.vendorId from Product p where p.productId3 = :id 
+0

Кстати, если вы не возражаете, можете ли вы объяснить, почему мой первоначальный запрос не работал? Благодаря! – dlinx90

+0

sql-запросы не работают как таковые с Hibernate/JPA см. Http://en.wikipedia.org/wiki/Java_Persistence_Query_Language – Subin

0

Простите суетливый ответ, но одна вещь, которая может HQL понятнее для вас, чтобы переименовать поля на 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(); 
    } 
Смежные вопросы