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

JPA:尝试保留对象时出现奇怪的错误

成和悌
2023-03-14
问题内容

我和OneToMany之间有关系User``Group
Group.java

@Entity
public class Group {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)        
private Long id;

private String groupid;

@ManyToOne
@JoinColumn(name="USER_FK")
private User user;
...
}

User.java

@Entity
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)    
private Long id;

private String userId;

private String password;

private String fname;

private String lname;

@OneToMany(mappedBy="user", cascade=CascadeType.ALL)
private List<Group> groups;

public void addGroup(Group group){
    if(this.groups == null){
        this.groups = new ArrayList<Group>();
    }
    this.groups.add(group);
    group.setUser(this);
}
}

所以当我尝试持久化对象时

    User user = em.find(User.class, 1L);
    user.addGroup(group);
    persist(user);

我懂了

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: 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 (ID, GROUPID, USER_FK) VALUES (2501, 'fdsaf', 1)' at line 1
Error Code: 1064
Call: INSERT INTO GROUP (ID, GROUPID, USER_FK) VALUES (?, ?, ?)
bind => [2501, fdsaf, 1]
Query: InsertObjectQuery(org.xdrawings.entity.Group@a1c)

如您所见,它尝试插入正确的值,但是以某种方式将其标记为语法错误。我认为它缺少左右的单引号GROUP,但是由于它是在后台进行查询的,所以我不知道如何解决它。请注意,我对同一项目中的其他实体执行了完全相同的操作,并且工作正常。太沮丧了!!


问题答案:

GROUP确实是保留的关键字,您必须对其进行转义。在JPA 2.0中,有一种标准化的方法来指定分隔标识符。根据JPA 2.0规范:

2.13数据库对象的命名

要指定分隔标识符,必须使用以下方法之一:

  • 通过在对象/关系xml映射文件<delimited-identifiers/>persistence-unit- defaults元素中指定元素,可以将用于持久性单元的所有数据库标识符指定为分隔标识符。如果<delimited- identifiers/>指定了元素,则不能覆盖它。
  • 可以按名称指定将数据库对象的名称解释为带分隔符的标识符,如下所示:
    * 使用注释,通过将名称用双引号引起来将名称指定为带分隔符的标识符,从而对内部引号进行转义,例如@Table(name="\"customer\"")
    • 使用XML时,使用双引号将名称指定为分隔标识符,例如, <table name="&quot;customer&quot;"/>


所以这样的事情应该工作:

@Entity
@Table(name="\"GROUP\"")
public class Group {
    ...
}


 类似资料:
  • 所以我在做一个定时器包装函数,但是我在尝试打印参数的时候不断地得到错误。 我的计时器功能看起来是这样的: 理想的情况下,它也会打印kwargs,但显然这是一个完全不同的问题,尽管我会非常感谢如果有人帮助我做这件事。所以当没有一个论点的时候,我的结果很好: 给出:使用参数1000执行dummy_fn,取:0.2128157615661621 但是,如果我重新定义dummy_fn以获取更多的参数并传递

  • 我有一个数据帧,我试图在条形图中绘制,但我面临一个奇怪的错误。 print语句给出: 然后是绘图代码:给出以下错误: ---------------------------------------------------------------------------KeyError回溯(最近一次调用上次)~/opt/anaconda3/lib/python3。8/现场包/熊猫/核心/索引/基础。

  • 我试图在返回几个元素的驾驶舱函数中使用use效应,但我得到了这个奇怪的错误,说“第6行: React Hook”use效应在函数“驾驶舱”中被称为“驾驶舱”,它既不是React函数组件,也不是自定义的React Hook函数反应-钩子/钩子规则”。 但我的座舱组件肯定是一个功能?

  • 我们正尝试通过以下http请求获取Office 365组元数据:https://graph.microsoft.com/v1.0/groups/?$select=description、displayName、groupTypes、mail、mailEnabled、mailNickname、onpremissieslastsyncdatetime、onpremissiessecurityident

  • 问题内容: 我一直在使用PyCharm在PyQt中调试我的GUI。到目前为止,这确实非常成功,直到我在尝试调试gui时遇到一个奇怪的错误。我已经在脚本的开始以及各个点设置了一个断点,但是程序没有机会到达这一点。我也尝试删除所有断点并运行调试,但得到相同的结果。完整的回溯是: 有谁知道导致此错误的原因以及如何解决?当我正常运行代码(无需调试)时,不会遇到任何这些错误。 问题答案: 我遇到了同样的问题

  • 我在打印报告时出现了一个奇怪的错误。