[英]hibernate one-to-many save to database
我目前正在使用Hibernate
和Java
,正在尝试将对象持久保存在数据库中。 我们有一个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
需要如果可以存储Group
和ToDoList
也最好将其保存。 鉴于我们即将到来的截止日期,如果我可以自己存储Group
和ToDoList
,谁也足够了
“ 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.