当前位置: 首页 > 面试题库 >

将JPA实体命名为“组”是不合法的吗?

明财
2023-03-14
问题内容

我正在开发一个JEE6-应用程序,使用JPA 2.0和Hibernate 3.5.2-Final作为提供程序(和MySQL
5.1.41)。我的应用程序服务器是Glassfish V3.0.1。我已经有一个带有某些实体和关系的CRUD应用程序。

现在,我添加了一个(非常简单的)实体,名称为“ Group”。实体类如下所示:

package model
//Imports...
@Entity
public class Group {
  @Id @GeneratedValue
  private Long id;

  @NotNull
  private String name;

  //Getters and Setters
}

当然,我也将其添加到persistence.xml中,例如<class>model.Group</class>。我的persistence.xml删除并在部署时重新创建所有表。

因此,当我部署我的应用程序时,将生成除表组以外的所有实体的表。在hibernate日志中,我发现了以下错误(这不会阻止应用程序的部署)

[#|2010-06-30T11:54:29.862+0200|INFO|glassfish3.0.1|org.hibernate.cfg.AnnotationBinder|_ThreadID=11;_ThreadName=Thread-1;|Binding entity from annotated class: model.Group|#]
[#|2010-06-30T11:54:29.862+0200|INFO|glassfish3.0.1|org.hibernate.cfg.annotations.EntityBinder|_ThreadID=11;_ThreadName=Thread-1;|Bind entity model.Group on table Group|#]
[#|2010-06-30T11:54:33.773+0200|SEVERE|glassfish3.0.1|org.hibernate.tool.hbm2ddl.SchemaExport|_ThreadID=11;_ThreadName=Thread-1;|Unsuccessful: create table Group (id bigint not null auto_increment, name varchar(255) not null, primary key (id))|#]
[#|2010-06-30T11:54:33.773+0200|SEVERE|glassfish3.0.1|org.hibernate.tool.hbm2ddl.SchemaExport|_ThreadID=11;_ThreadName=Thread-1;|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 (id bigint not null auto_increment, name varchar(255) not null, primary ke' at line 1|#]
[#|2010-06-30T11:54:54.883+0200|INFO|glassfish3.0.1|org.hibernate.cfg.AnnotationBinder|_ThreadID=25;_ThreadName=Thread-1;|Binding entity from annotated class: model.Group|#]
[#|2010-06-30T11:54:54.884+0200|INFO|glassfish3.0.1|org.hibernate.cfg.annotations.EntityBinder|_ThreadID=25;_ThreadName=Thread-1;|Bind entity model.Group on table Group|#]
[#|2010-06-30T11:54:58.402+0200|SEVERE|glassfish3.0.1|org.hibernate.tool.hbm2ddl.SchemaExport|_ThreadID=25;_ThreadName=Thread-1;|Unsuccessful: create table Group (id bigint not null auto_increment, name varchar(255) not null, primary key (id))|#]
[#|2010-06-30T11:54:58.403+0200|SEVERE|glassfish3.0.1|org.hibernate.tool.hbm2ddl.SchemaExport|_ThreadID=25;_ThreadName=Thread-1;|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 (id bigint not null auto_increment, name varchar(255) not null, primary ke' at line 1|#]

现在,当我将实体重命名为“ MyGroup”(属性保持不变)时,相应地更改persistence.xml,然后重新部署我的应用程序,表“
MyGroup”已成功创建!我在日志中发现以下行,表明正确创建了MyGroup:

[#|2010-06-30T11:58:51.456+0200|INFO|glassfish3.0.1|org.hibernate.cfg.AnnotationBinder|_ThreadID=11;_ThreadName=Thread-1;|Binding entity from annotated class: model.MyGroup|#]
[#|2010-06-30T11:58:51.456+0200|INFO|glassfish3.0.1|org.hibernate.cfg.annotations.EntityBinder|_ThreadID=11;_ThreadName=Thread-1;|Bind entity model.MyGroup on table MyGroup|#]
[#|2010-06-30T11:59:21.569+0200|INFO|glassfish3.0.1|org.hibernate.cfg.AnnotationBinder|_ThreadID=25;_ThreadName=Thread-1;|Binding entity from annotated class: model.MyGroup|#]
[#|2010-06-30T11:59:21.569+0200|INFO|glassfish3.0.1|org.hibernate.cfg.annotations.EntityBinder|_ThreadID=25;_ThreadName=Thread-1;|Bind entity model.MyGroup on table MyGroup|#]

任何人都知道问题出在哪里吗?好的,我可以将Group重命名为MyGroup,但是我真的很想知道这里发生了什么。我现在应该有什么限制,例如“不要叫实体组”?但是,如果是这样,为什么我仍然不清楚该错误?


问题答案:

组是数据库MySQL中的保留字,请参见此处

编辑:

package model
//Imports...
@Entity
@Table(name = "group_table")
public class Group {
  @Id @GeneratedValue
  private Long id;

  @NotNull
  private String name;

  //Getters and Setters
}


 类似资料:
  • 我有一个JPA项目(Eclipse Link),工作正常,但我想持久化一个不是实体的类(或在相同的持久化上下文中不是实体),目前我持久化引用id,然后我执行调用以检索对象。我需要知道什么是最好的方式做到这一点…我不希望在bean中添加代码作为侦听器事件,因为我希望有一个干净的bean(构造、属性、不带注释的setter和getter), 我的想法是扩展PersistenceContext(但是,我

  • 问题内容: 我正在将包含html命名实体的html块转换为使用编号的xml实体的xml兼容块,同时将所有html标记元素保留在原位。 这是通过测试说明的基本思想: 有人知道提供此功能的类吗?我可以编写一个正则表达式来遍历非元素匹配并执行以下操作: 但希望有一种更简单的方法或已经提供此功能的Class。 问题答案: 您尝试过JTidy吗? 虽然我认为它会修复某些情况下的HTML代码。

  • 假设我有两个实体: 是否可以这样做: 即:接受一个实体(本例中为< code>Address)作为参数,但在原生查询中引用它的一个属性(本例中为< code>Address.street? 由于各种原因,我不能对这两个实体使用“正常”和JPA查询。

  • 问题内容: 我使用NLTK从文本中提取命名实体: 但是我不知道如何将这些实体保存到列表中?例如– 谢谢。 问题答案: 返回嵌套对象,因此您必须遍历该对象才能到达网元。 看看带有正则表达式的命名实体识别:NLTK

  • 我正在使用JPA Spring开发Web应用程序。我的项目层结构是web- 我的应用程序在 http 会话中获取存储的域实体。在我对实体执行任何数据库操作之前,需要使用 merge 将其重新附加到实体管理器。我想知道将实体合并到实体管理器的最佳方法。目前每次调用事务方法时,我都会调用 genericDAO.merge(object)。例如: 有没有其他更好的方法来做到这一点。有什么设计模式可用吗?

  • 我的域名名称是3dtopo.com。显然Java不允许包域名以数字开头。 为什么Java反向域名不遵循域名一样的规则?我真的不想把我的包裹命名为com.threedtopo.. 首先,这不是我的域名!任何人都可以自由注册和使用该域名。此外,它是非常尴尬的,不是我的业务名称。 有人有包名建议吗?