Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/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
生成器在策略中不递增=jpa中的GenerationType.TABLE_Jpa - Fatal编程技术网

生成器在策略中不递增=jpa中的GenerationType.TABLE

生成器在策略中不递增=jpa中的GenerationType.TABLE,jpa,Jpa,我在Employee表上使用了strategy=GenerationType.TABLE,我使用@TableGenerator(name=“Emp\u Gen”,TABLE=“ID\u Gen”,pkColumnName=“Gen\u name”,valueColumnName=“Gen\u VALUE”)定义了一个生成器,并使用生成器的名称“Emp\u Gen”在@GeneratedValue(generator=“Emp\u Gen”)中指定了生成器。当应用程序启动时,它会创建一个名为“ID

我在Employee表上使用了strategy=GenerationType.TABLE,我使用@TableGenerator(name=“Emp\u Gen”,TABLE=“ID\u Gen”,pkColumnName=“Gen\u name”,valueColumnName=“Gen\u VALUE”)定义了一个生成器,并使用生成器的名称“Emp\u Gen”在@GeneratedValue(generator=“Emp\u Gen”)中指定了生成器。当应用程序启动时,它会创建一个名为“ID\u GEN”的表,但该表不包含任何名为“emp\u GEN”的生成器。实际上,它会创建一个与我的实体类名相同的生成器“EMPLOYEE”。还有“GEN\u value”的值持久化员工实体时不会增加。员工ID也是随机生成的

package com.test.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.TableGenerator;

@Entity
public class Employee {

@TableGenerator(name="Empl_Gen", table="ID_GEN",pkColumnName="GEN_NAME",valueColumnName="GEN_VALUE")
@Id@GeneratedValue(generator="Empl_Gen",strategy=GenerationType.TABLE)
private Long id;

private String Name;

private String Country;

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getCountry() {
    return Country;
}

public void setCountry(String country) {
    Country = country;
}

}

您的意思是说在ID\u GEN表中,它创建了一行,其中包含GEN\u NAME=“EMPLOYEE”?是的,这就是它应该做的。。。为员工表生成的值。它将创建ID块(为什么任何表生成器都有initialValue和allocationSize)。发布发布的SQL以及与该SQL匹配的持久性代码。当您在使用JPA时,请提及哪个JPA实现。是的,先生,它使用GEN_NAME=“EMPLOYEE”创建了行,但正如我目前正在阅读的书(Mike Keith&Merrick的pro JPA 2)中所写的那样,他写道:“生成器的名称将成为该行的pkColumnNamecolumn列中存储的值,并由提供程序用于查找生成器以获取其最后分配的值”。先生,您是否可以重新定义ID块的概念。下面是我发布的SQL:……Hibernate:插入ID_GEN(GEN_name,GEN_value)值('Employee',?)Hibernate:update ID_GEN set GEN_VALUE=?其中GEN_VALUE=?和GEN_NAME='Employee'Hibernate:insert into Employee(Country,NAME,ID)VALUE(?,,?)你是指EclipseLink作者写的关于EclipseLink实现的书(JPA规范中没有定义该表中应该包含的内容)。您使用的是哪种实现?很抱歉,我使用的是jpa 2.0实现