Java 为什么Hibernate要选择相同的列两次?
请注意,Java 为什么Hibernate要选择相同的列两次?,java,hibernate,orm,Java,Hibernate,Orm,请注意,ID和DEPT列被选择两次 Hibernate: /* load entities.Department */ select department0_.name as name4_0_, department0_.id as id4_0_ from J_DEPT department0_ where department0_.name=? Hibernate: /* load one-
ID
和DEPT
列被选择两次
Hibernate:
/* load entities.Department */ select
department0_.name as name4_0_,
department0_.id as id4_0_
from
J_DEPT department0_
where
department0_.name=?
Hibernate:
/* load one-to-many entities.Department.employees */ select
employees0_.dept as dept4_1_,
employees0_.id as id1_,
employees0_.id as id5_0_,
employees0_.dept as dept5_0_,
employees0_.name as name5_0_
from
J_EMP employees0_
where
employees0_.dept=?
我想还是一样
以下是表格:
Hibernate:
/* load entities.Department */ select
department0_.id as id4_0_,
department0_.name as name4_0_
from
J_DEPT department0_
where
department0_.id=?
Hibernate:
/* load one-to-many entities.Department.employees */ select
employees0_.dept as dept4_1_,
employees0_.id as id1_,
employees0_.id as id5_0_,
employees0_.dept as dept5_0_,
employees0_.name as name5_0_
from
J_EMP employees0_
where
employees0_.dept=?
下面是代码-我将按原样粘贴到这里:
CREATE TABLE "XYZ"."J_DEPT"
( "ID" NUMBER(*,0) NOT NULL ENABLE,
"NAME" VARCHAR2(255 BYTE) NOT NULL ENABLE,
CONSTRAINT "J_DEPT_PK" PRIMARY KEY ("ID")
)
CREATE TABLE "XYZ"."J_EMP"
( "ID" NUMBER NOT NULL ENABLE,
"NAME" VARCHAR2(255 BYTE),
"DEPT" NUMBER NOT NULL ENABLE,
CONSTRAINT "J_EMP_PK" PRIMARY KEY ("ID"))
可能是因为这一部分:
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@ContextConfiguration(locations = { "classpath:test-applicationContext.xml" })
@Transactional
public class EmpTest {
@Autowired
private SessionFactory sessionFactory;
@Test
public void testDept() {
final Department find = (Department) sessionFactory.getCurrentSession()
.get(Department.class, Long.parseLong("1"));
System.out.println("find res = " + find);
}
}
此处有问题,GeneratedValue
不能应用于非主键。你是说:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySeq")
@SequenceGenerator(name = "mySeq", sequenceName = "CNTRY_SEQ")
private Long id;
@Id
@Column(name = "name")
private String deptNameInDeptEntity;
如果不是,如果这是有意的,请解释你的目标并出示你的表格
更新:我无法重现该问题。我复制粘贴了您提供的代码,下面是我得到的查询:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySeq")
@SequenceGenerator(name = "mySeq", sequenceName = "CNTRY_SEQ")
private Long id;
@Column(name = "name")
private String deptNameInDeptEntity;
一切正常
Google在“”上的搜索揭示了一些(旧的)问题,所以我不排除任何东西,但我找不到任何最近存在问题的证据。你能提供一个测试用例(使用嵌入式数据库)吗?我不这么认为,因为我为非PK保留了@GeneratedValue。我已经检查了其他实体。Hibernate对几乎所有我的实体都是这样做的。@HanuAthena您将
deptnameIndepentity
声明为Id
,而映射列不是PK的候选列。这不行。请显示当前代码和当前表格。你做错了什么(我不排除一个全球性的错误)。谢谢你的回复:)我的错,我可以在更新时发布新代码。现在我把所有的东西都放好了。它仍然是一样的。你能详细说明一下吗:“你能提供一个测试用例(使用嵌入式数据库)吗?”?。重复别名与Hibernate版本有关吗?我的环境是:Spring3.0.3和Hibernate3.5.5-Final。(仅供参考)@HanuAthena我的意思是提供一个最小的项目,其中包含一个实体、一个测试、一个配置为使用Derby、H2、HSQLDB等数据库并记录SQL的Hibernate。可以繁殖的东西。你真的尝试过另一个数据库吗?老实说,我认为不太可能出现错误。你解决问题了吗?如果是,请添加一个答案。
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySeq")
@SequenceGenerator(name = "mySeq", sequenceName = "CNTRY_SEQ")
private Long id;
@Id
@Column(name = "name")
private String deptNameInDeptEntity;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySeq")
@SequenceGenerator(name = "mySeq", sequenceName = "CNTRY_SEQ")
private Long id;
@Column(name = "name")
private String deptNameInDeptEntity;
select
employee37x0_.id as id135_,
employee37x0_.dept as dept135_,
employee37x0_.name as name135_
from
J_EMP employee37x0_
where
employee37x0_.id=?