代码之家  ›  专栏  ›  技术社区  ›  YH. Liang

Java Hibernate SQL错误:检查正确的语法以在第1行使用“condition,description,name,pictures,price,status,User\u UserAddress\u idUserAd”

  •  1
  • YH. Liang  · 技术社区  · 7 年前

    javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement
    
    Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement
    
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'condition, description, name, pictures, price, status, User_UserAddress_idUserAd' at line 1
    

    这是我的产品类别:

    @Entity
    @IdClass(ProductPK.class)
    public class Product {
        private int idProduct;
        private String name;
        private String description;
        private double price;
        private String pictures;
        private int status;
        private int tradingAddressIdTradingAddress;
        private int condition;
        private int userIdUser;
        private int userUserAddressIdUserAddress;
        private int userSchoolIdSchool;
        private Collection<CategoryHasProduct> categoryHasProducts;
        private TradingAddress tradingAddressByTradingAddressIdTradingAddress;
        private User user;
    
        public Product() { }
    
        @Id
        @Column(name = "idProduct", unique=true, nullable=false)
        public int getIdProduct() {
            return idProduct;
        }
    
        public void setIdProduct(int idProduct) {
            this.idProduct = idProduct;
        }
    
        @Basic
        @Column(name = "name")
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Basic
        @Column(name = "description")
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        @Basic
        @Column(name = "price")
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        @Basic
        @Column(name = "pictures")
        public String getPictures() {
            return pictures;
        }
    
        public void setPictures(String pictures) {
            this.pictures = pictures;
        }
    
        @Basic
        @Column(name = "status")
        public int getStatus() {
            return status;
        }
    
        public void setStatus(int status) {
            this.status = status;
        }
    
        @Id
        @Column(name = "TradingAddress_idTradingAddress")
        public int getTradingAddressIdTradingAddress() {
            return tradingAddressIdTradingAddress;
        }
    
        public void setTradingAddressIdTradingAddress(int tradingAddressIdTradingAddress) {
            this.tradingAddressIdTradingAddress = tradingAddressIdTradingAddress;
        }
    
        @Basic
        @Column(name = "condition")
        public int getCondition() {
            return condition;
        }
    
        public void setCondition(int condition) {
            this.condition = condition;
        }
    
        @Id
        @Column(name = "User_idUser")
        public int getUserIdUser() {
            return userIdUser;
        }
    
        public void setUserIdUser(int userIdUser) {
            this.userIdUser = userIdUser;
        }
    
        @Id
        @Column(name = "User_UserAddress_idUserAddress")
        public int getUserUserAddressIdUserAddress() {
            return userUserAddressIdUserAddress;
        }
    
        public void setUserUserAddressIdUserAddress(int userUserAddressIdUserAddress) {
            this.userUserAddressIdUserAddress = userUserAddressIdUserAddress;
        }
    
        @Id
        @Column(name = "User_School_idSchool")
        public int getUserSchoolIdSchool() {
            return userSchoolIdSchool;
        }
    
        public void setUserSchoolIdSchool(int userSchoolIdSchool) {
            this.userSchoolIdSchool = userSchoolIdSchool;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            Product product = (Product) o;
    
            if (idProduct != product.idProduct) return false;
            if (Double.compare(product.price, price) != 0) return false;
            if (status != product.status) return false;
            if (tradingAddressIdTradingAddress != product.tradingAddressIdTradingAddress) return false;
            if (condition != product.condition) return false;
            if (userIdUser != product.userIdUser) return false;
            if (userUserAddressIdUserAddress != product.userUserAddressIdUserAddress) return false;
            if (userSchoolIdSchool != product.userSchoolIdSchool) return false;
            if (name != null ? !name.equals(product.name) : product.name != null) return false;
            if (description != null ? !description.equals(product.description) : product.description != null) return false;
            if (pictures != null ? !pictures.equals(product.pictures) : product.pictures != null) return false;
    
            return true;
        }
    
        @Override
        public int hashCode() {
            int result;
            long temp;
            result = idProduct;
            result = 31 * result + (name != null ? name.hashCode() : 0);
            result = 31 * result + (description != null ? description.hashCode() : 0);
            temp = Double.doubleToLongBits(price);
            result = 31 * result + (int) (temp ^ (temp >>> 32));
            result = 31 * result + (pictures != null ? pictures.hashCode() : 0);
            result = 31 * result + status;
            result = 31 * result + tradingAddressIdTradingAddress;
            result = 31 * result + condition;
            result = 31 * result + userIdUser;
            result = 31 * result + userUserAddressIdUserAddress;
            result = 31 * result + userSchoolIdSchool;
            return result;
        }
    
        @OneToMany(mappedBy = "product")
        public Collection<CategoryHasProduct> getCategoryHasProducts() {
            return categoryHasProducts;
        }
    
        public void setCategoryHasProducts(Collection<CategoryHasProduct> categoryHasProducts) {
            this.categoryHasProducts = categoryHasProducts;
        }
    
        @ManyToOne
        @JoinColumn(name = "TradingAddress_idTradingAddress", referencedColumnName = "idTradingAddress", nullable = false, insertable = false, updatable =  false)
        public TradingAddress getTradingAddressByTradingAddressIdTradingAddress() {
            return tradingAddressByTradingAddressIdTradingAddress;
        }
    
        public void setTradingAddressByTradingAddressIdTradingAddress(TradingAddress tradingAddressByTradingAddressIdTradingAddress) {
            this.tradingAddressByTradingAddressIdTradingAddress = tradingAddressByTradingAddressIdTradingAddress;
        }
    
        @ManyToOne
        @JoinColumns({@JoinColumn(name = "User_idUser", referencedColumnName = "idUser", nullable = false, insertable = false, updatable =  false), @JoinColumn(name = "User_UserAddress_idUserAddress", referencedColumnName = "UserAddress_idUserAddress", nullable = false, insertable = false, updatable =  false), @JoinColumn(name = "User_School_idSchool", referencedColumnName = "School_idSchool", nullable = false, insertable = false, updatable =  false)})
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }
    

    public class ProductPK implements Serializable {
        private int idProduct;
        private int tradingAddressIdTradingAddress;
        private int userIdUser;
        private int userUserAddressIdUserAddress;
        private int userSchoolIdSchool;
    
        @Column(name = "idProduct")
        @Id
        public int getIdProduct() {
            return idProduct;
        }
    
        public void setIdProduct(int idProduct) {
            this.idProduct = idProduct;
        }
    
        @Column(name = "TradingAddress_idTradingAddress")
        @Id
        public int getTradingAddressIdTradingAddress() {
            return tradingAddressIdTradingAddress;
        }
    
        public void setTradingAddressIdTradingAddress(int tradingAddressIdTradingAddress) {
            this.tradingAddressIdTradingAddress = tradingAddressIdTradingAddress;
        }
    
        @Column(name = "User_idUser")
        @Id
        public int getUserIdUser() {
            return userIdUser;
        }
    
        public void setUserIdUser(int userIdUser) {
            this.userIdUser = userIdUser;
        }
    
        @Column(name = "User_UserAddress_idUserAddress")
        @Id
        public int getUserUserAddressIdUserAddress() {
            return userUserAddressIdUserAddress;
        }
    
        public void setUserUserAddressIdUserAddress(int userUserAddressIdUserAddress) {
            this.userUserAddressIdUserAddress = userUserAddressIdUserAddress;
        }
    
        @Column(name = "User_School_idSchool")
        @Id
        public int getUserSchoolIdSchool() {
            return userSchoolIdSchool;
        }
    
        public void setUserSchoolIdSchool(int userSchoolIdSchool) {
            this.userSchoolIdSchool = userSchoolIdSchool;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            ProductPK productPK = (ProductPK) o;
    
            if (idProduct != productPK.idProduct) return false;
            if (tradingAddressIdTradingAddress != productPK.tradingAddressIdTradingAddress) return false;
            if (userIdUser != productPK.userIdUser) return false;
            if (userUserAddressIdUserAddress != productPK.userUserAddressIdUserAddress) return false;
            if (userSchoolIdSchool != productPK.userSchoolIdSchool) return false;
    
            return true;
        }
    
        @Override
        public int hashCode() {
            int result = idProduct;
            result = 31 * result + tradingAddressIdTradingAddress;
            result = 31 * result + userIdUser;
            result = 31 * result + userUserAddressIdUserAddress;
            result = 31 * result + userSchoolIdSchool;
            return result;
        }
    }
    

    这里是我保存产品的地方:

    User user = getUserByUserId(session, userId);
    Integer id = initiateTradingAddressForProduct(session);
    
    Product product = new Product();
    setProductBasicInfo(product, name, description, price, condition, status);
    product.setTradingAddressIdTradingAddress(id);
    product.setUserIdUser(userId);
    product.setPictures("none");
    product.setUserSchoolIdSchool(user.getSchoolIdSchool());
    product.setUserUserAddressIdUserAddress(user.getUserAddressIdUserAddress());                 
    session.save(product);
    session.flush(); // The exception is thrown at this line
    

    我不知道是什么原因导致了这些例外。有人能帮我解决这个问题吗?非常感谢你!

    Hibernate: 
        /* insert main.java.entities.Product
            */ insert 
            into
                Product
                (condition, description, name, pictures, price, status, User_UserAddress_idUserAddress, User_School_idSchool, User_idUser, TradingAddress_idTradingAddress, idProduct) 
            values
                (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    binding parameter [1] as [INTEGER] - [5]
    binding parameter [2] as [VARCHAR] - [very good]
    binding parameter [3] as [VARCHAR] - [plane]
    binding parameter [4] as [VARCHAR] - [none]
    binding parameter [5] as [DOUBLE] - [132.0]
    binding parameter [6] as [INTEGER] - [3]
    binding parameter [7] as [INTEGER] - [11]
    binding parameter [8] as [INTEGER] - [15]
    binding parameter [9] as [INTEGER] - [57]
    binding parameter [10] as [INTEGER] - [38]
    binding parameter [11] as [INTEGER] - [0]
    SQL Error: 1064, SQLState: 42000
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'condition, description, name, pictures, price, status, User_UserAddress_idUserAd' at line 1
    

    我详细检查了SQL,我认为所有的值都在应该的位置。此外,我尝试删除@id注释,但这并没有解决问题。

    1 回复  |  直到 7 年前
        1
  •  0
  •   YH. Liang    7 年前

    我解决了这个问题。问题是 condition 是MySql中的保留关键字。如果我使用它作为属性的名称,我必须转义保留的关键字。

    我从他的回答中得到了一些想法,他指出的观点完全在正确的方向上。无论如何,谢谢大家回答这个问题。