Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Hibernate要选择相同的列两次?_Java_Hibernate_Orm - Fatal编程技术网

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