簡體   English   中英

休眠一對多保存到數據庫

[英]hibernate one-to-many save to database

我目前正在使用HibernateJava ,正在嘗試將對象持久保存在數據庫中。 我們有一個Group類和一個ToDoList類。 Group有一個一對多的關系ToDoList作為顯示在此ERD

Group類中的相關代碼:

@Entity
@Table(name = "Group", catalog = "db")
public class Group implements java.io.Serializable{
    private int id;
    private Set<ToDoList> allToDoLists;

    public Group(){
        allToDoLists = new HashSet<ToDoList>(0);
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "Group_id", unique = true, nullable = false)
    public int getId(){
        return this.id;
    }

    public void setId(int id){
        this.id = id;
    }
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "group")
    public Set<ToDoList> getAllToDoLists() {
        return this.allToDoLists;
    }

    public void addTodoList(ToDoList t){
        this.allToDoLists.add(t);
        t.setGroup(this);
    }

    public void setAllToDoLists(Set<ToDoList> allToDoLists) {
        this.allToDoLists = allToDoLists;
    }
}

ToDoList類的相關代碼:

@Entity
@Table (name = "Todo_List", catalog = "db")
public class ToDoList {
    private int id;
    private Group group;

    public ToDoList(){}

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "Todo_List_id", unique = true, nullable = false)
    public int getId(){
        return this.id;
    }

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

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "Group", nullable = false)
    public Group getGroup() {
        return this.group;
    }
    public void setGroup(Group group) {
        this.group = group;
    }
}

發生問題的代碼:

ToDoList toDoList = new ToDoList("TodoList1","Iets","24-06-2015","24-06-2015");
Group group = new Group("Groep 1","10-11-2011","10-11-2011");
GroupDao groupDao = new GroupDaoImpl();
groupDao.store(group);
toDoList.setGroup(group);
toDoListDao.store(toDoList);

“ groupDao”和“ toDoListDao”中用於存儲的代碼基本相同:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(toDoList);
session.getTransaction().commit();

問題當我嘗試存儲ToDoList時,出現以下錯誤:

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 'Group, Name) values ('2015-06-24', '2015-06-24', 'Iets', 23, 'TodoList1')' at line 1

需要如果可以存儲GroupToDoList也最好將其保存。 鑒於我們即將到來的截止日期,如果我可以自己存儲GroupToDoList ,誰也足夠了

“ Group”是一個SQL關鍵字(“ group by”)。 因此,這不是表名的最佳選擇。 鑒於Hibernate生成了DBMS不接受的SQL,這似乎引起了沖突。

如果您不能更改表名,則可以通過引用實體中的名稱來解決該沖突,如下所示:

@Table(name = "`Group`", catalog = "db")

要么

@Table(name = "\"Group\"", catalog = "db")

編輯:

就像ug_告訴我的那樣,您還可以在persistence.xml文件中設置以下hibernate屬性,以默認情況下對所有標識符執行此操作:

<property name="hibernate.globally_quoted_identifiers" value="true" />

我自己從未使用過它,但是Javadocs確認這確實是受支持的屬性:

https://docs.jboss.org/hibernate/orm/4.2/javadocs/org/hibernate/cfg/AvailableSettings.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM