首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate保存关系表

Hibernate保存关系表
EN

Stack Overflow用户
提问于 2012-04-14 12:20:55
回答 2查看 290关注 0票数 1

我有一个具有以下表格结构的数据库..。

客户表有两个列: id、name。

Order表有两个列: id,customer_id

这两张表之间有一对一的关系。

当我运行我的代码(如下所示)时,我会得到以下异常:

代码语言:javascript
复制
Hibernate: insert into customer (name) values (?)
Hibernate: insert into order (customer_id) values (?)
05:02:46,374  WARN [main] JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 42601
05:02:46,379 ERROR [main] JDBCExceptionReporter:234 - ERROR: syntax error at or near "order"

这是我的密码。有人能帮我解释一下问题的原因吗..。

代码语言:javascript
复制
@Entity
@Table(name = "customer")
public class Customer implements Serializable {


    public Customer() {
    }

    private long id;
    private String name;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", insertable = false, updatable = false, nullable = false)
    public long getId() {
        return id;
    }

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

    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


@Entity
@Table(name = "order")

public class Order implements Serializable {
    public Order() {
    }

    public Order(Customer customer) {
        this.customer = customer;
    }

    private long id;
    private Customer customer;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", insertable = false, updatable = false, nullable = false)
    public long getId() {
        return id;
    }

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

    @OneToOne(cascade = { CascadeType.ALL })
    @JoinColumn(name = "customer_id")
    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
        // setCustomerId(customer.getId());
    }
}

public static void main(String[] args) {

    Customer cm = new Customer();
    cm.setName("John");
    
    Order ord = new Order(cm);

    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();

    Transaction transaction = null;

    try {
        transaction = session.beginTransaction();
        session.save(ord);
        transaction.commit();
}
    catch (HibernateException e) {
        transaction.rollback();
        e.printStackTrace();
    }
    finally {
        session.close();
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-14 12:34:24

order是一个SQL关键字。如果无法更改数据库名称,请尝试使用:

代码语言:javascript
复制
@Table( name = "\"order\"" )

但是,如果您还在开发中,请更改表名和列名,以避免使用SQL关键字。

票数 1
EN

Stack Overflow用户

发布于 2012-04-14 12:22:30

ORDER是SQL关键字。也许表名混淆了解析器。我建议你重命名它,然后再试一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10153567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档