相同的字段名称导致系统错误

时间:2018-10-02 07:20:52

标签: java postgresql ejb wildfly

问题本身将一直更新,直到错误消除。

几个月前,我们最近对系统进行了升级,从JBoss升级到Wildfly,此后我们的系统就出现了故障。

让我们说以下表格

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 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

我仍然遇到错误,所以我决定从每个表中选择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

此查询有效,因此很明显每当两个表上的字段名称相同时,系统都会引发错误。

这是什么问题,我该如何解决?我应该从哪里开始寻找?任何帮助指向正确方向的链接都将非常有用!

error
----

WFLYEJB0443: EJB 3.1 FR 13.3.3: BMT bean SqlSearchExecutionSessionBean should complete transaction before returning.

但是正如我之前所说,这是一个普遍错误,当我拼写错误的表名或字段名时,有时也会得到它!

2 个答案:

答案 0 :(得分:1)

查询结果的列名不能相同。 因此列名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,就像您在join语句中一样。但是,如果您确实希望在查询中使用它,则可以给它一个别名cs.id AS csid(或其他一些未使用的名称),并将其添加到SELECT语句中。

答案 1 :(得分:0)

我强烈建议您在不同表中的同一字段出现错误时,尝试以这种方式放置它们,而不是给表取别名:

select Students.id,ClassStudent.id
from Students
join ClassStudent on ClassStudent.id = Student.classid