相同的字段名称导致系统出错
Identical field names causing error in system
问题本身将被更新,直到错误被清除。
几个月前,我们最近对系统进行了升级,从 JBoss 升级到 Wildfly,从那以后我们的系统就出问题了。
假设我有以下 tables
CREATE TABLE students(
ID int,
Classid int,
Name varchar(50),
Version int
)
CREATE TABLE classstudent(
ID int,
Classname varchar(50),
Version int
)
我编写了以下查询并且有效
select *
from students
我写了下面的但是没有用
select *
from students s
join classStudent cs on cs.id = s.classid
所以我决定select每个字段
select s.id,s.classid,c.name,s.version,cs.id,cs.classname,cs.version
from students s
join classStudent cs on cs.id = s.classid
我仍然遇到错误,所以我决定 select 每个 table
的 2 个 ID
select s.id,cs.id
from students s
join classStudent cs on cs.id = s.classid
我又遇到了一次错误,但后来我将 ID 重命名为不同的名称
select s.id as sid,cs.id as csid
from students s
join classStudent cs on cs.id = s.classid
这个查询有效,所以很明显,只要 table 上有相同的字段名称,系统就会抛出错误。
这是什么问题,我该如何解决这个问题?我应该从哪里开始寻找?任何 link 帮助我指明正确方向的人都会很棒!
error
----
WFLYEJB0443: EJB 3.1 FR 13.3.3: BMT bean SqlSearchExecutionSessionBean should complete transaction before returning.
正如我之前所说,这是一个普遍错误,有时我也会在拼错 table 名称或字段名称时遇到此错误!
如果您在不同的 table 中遇到相同字段的错误,我强烈建议您尝试以这种方式放置它们,而不是给 table 一个别名:
select Students.id,ClassStudent.id
from Students
join ClassStudent on ClassStudent.id = Student.classid
您的查询结果不能有相同的列名。
所以列名 id
在你的 SELECT 语句中只能存在一次。
所以我会试试这个:
select s.id, s.classid, c.name, s.version, cs.classname, cs.version
from Students s
join ClassStudent cs on cs.id = s.classid
在这里您不必提及 cs.id
,因为它始终等于 s.id
,因为它在您的连接语句中。但是,如果您在查询中确实需要它,您可以给它一个像这样的别名 cs.id AS csid
(或其他一些未使用的名称)并将其添加到您的 SELECT 语句中。
问题本身将被更新,直到错误被清除。
几个月前,我们最近对系统进行了升级,从 JBoss 升级到 Wildfly,从那以后我们的系统就出问题了。
假设我有以下 tables
CREATE TABLE students(
ID int,
Classid int,
Name varchar(50),
Version int
)
CREATE TABLE classstudent(
ID int,
Classname varchar(50),
Version int
)
我编写了以下查询并且有效
select *
from students
我写了下面的但是没有用
select *
from students s
join classStudent cs on cs.id = s.classid
所以我决定select每个字段
select s.id,s.classid,c.name,s.version,cs.id,cs.classname,cs.version
from students s
join classStudent cs on cs.id = s.classid
我仍然遇到错误,所以我决定 select 每个 table
的 2 个 IDselect s.id,cs.id
from students s
join classStudent cs on cs.id = s.classid
我又遇到了一次错误,但后来我将 ID 重命名为不同的名称
select s.id as sid,cs.id as csid
from students s
join classStudent cs on cs.id = s.classid
这个查询有效,所以很明显,只要 table 上有相同的字段名称,系统就会抛出错误。
这是什么问题,我该如何解决这个问题?我应该从哪里开始寻找?任何 link 帮助我指明正确方向的人都会很棒!
error
----
WFLYEJB0443: EJB 3.1 FR 13.3.3: BMT bean SqlSearchExecutionSessionBean should complete transaction before returning.
正如我之前所说,这是一个普遍错误,有时我也会在拼错 table 名称或字段名称时遇到此错误!
如果您在不同的 table 中遇到相同字段的错误,我强烈建议您尝试以这种方式放置它们,而不是给 table 一个别名:
select Students.id,ClassStudent.id
from Students
join ClassStudent on ClassStudent.id = Student.classid
您的查询结果不能有相同的列名。
所以列名 id
在你的 SELECT 语句中只能存在一次。
所以我会试试这个:
select s.id, s.classid, c.name, s.version, cs.classname, cs.version
from Students s
join ClassStudent cs on cs.id = s.classid
在这里您不必提及 cs.id
,因为它始终等于 s.id
,因为它在您的连接语句中。但是,如果您在查询中确实需要它,您可以给它一个像这样的别名 cs.id AS csid
(或其他一些未使用的名称)并将其添加到您的 SELECT 语句中。