如何使用java+;冬眠?

如何使用java+;冬眠?,java,sql-server,spring,hibernate,jdbc,Java,Sql Server,Spring,Hibernate,Jdbc,我在尝试使用hibernate运行此java代码时收到以下错误消息: create table EMPLOYEE ( ID integer not null, JOINING_DATE date not null, NAME varchar(50) not null, SALARY decimal(10,2) not null, SSN varchar(255) not null, primary key (ID) ) 下面提到我的Java代码,

我在尝试使用hibernate运行此java代码时收到以下错误消息:

create table EMPLOYEE (
    ID integer not null,
    JOINING_DATE date not null,
    NAME varchar(50) not null,
    SALARY decimal(10,2) not null,
    SSN varchar(255) not null,
    primary key (ID)
)
下面提到我的Java代码,使用hibernate,我需要在DB中插入值

@Entity
@Table(name="EMPLOYEE")
public class Employee {

    @Id
    @Column(name = "ID", nullable = false, insertable = false, updatable = false)
    @TableGenerator(name="ID" ,table="EMPLOYEE", allocationSize=1, initialValue=1)
    private int id;

    @Size(min=3, max=50)
    @Column(name = "NAME", nullable = false)
    private String name;
但在插入值时,我得到以下错误:

threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
com.microsoft.sqlserver.jdbc.SQLServerException: Violation of PRIMARY KEY constraint 'PK__EMPLOYEE__3214EC27B6653156'. Cannot insert duplicate key in object 'dbo.EMPLOYEE'. The duplicate key value is (0).
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
    at  

创建表时,应指出
ID
列是主键,数据库应控制赋值:

 id integer NOT NULL IDENTITY PRIMARY KEY,
我不熟悉
@TableGenerator
注释,更常见的方法是使用以下内容注释
id
字段:

@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
身份 指示持久性提供程序必须使用数据库标识列为实体分配主键。

因此,让
Hibernate
知道此字段的值由数据库控制


我希望这有帮助。

在创建表时,您应该指出
ID
列是主键,数据库应该控制赋值:

 id integer NOT NULL IDENTITY PRIMARY KEY,
我不熟悉
@TableGenerator
注释,更常见的方法是使用以下内容注释
id
字段:

@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
身份 指示持久性提供程序必须使用数据库标识列为实体分配主键。

因此,让
Hibernate
知道此字段的值由数据库控制

我希望这有帮助。

尝试使用

private Integer id;
尝试使用

private Integer id;

@TableGenerator的文档说明:

定义主键生成器,当为GeneratedValue注释指定生成器元素时,可以通过名称引用该主键生成器

这意味着id字段还应具有@GeneratedValue注释,例如。 @TableGenerator(name=“myTableGen”,table=“xxx”,allocationSize=1,initialValue=1) @GeneratedValue(策略=表格,生成器=“myTableGen”)

因此@TableGenerator的属性可以解释如下: 名称:唯一的生成器名称,可由一个或多个类引用作为id值的生成器。 表:存储主键值的表 pkColumnName:表中存储主键值的列

参考是


然而@TableGenerator意味着使用一个单独的表来保存生成的ID。如果您不想产生这种开销,只想在ID列中生成值,则可以使用其他生成器类型,例如序列或标识@TableGenerator的文档说明:

定义主键生成器,当为GeneratedValue注释指定生成器元素时,可以通过名称引用该主键生成器

这意味着id字段还应具有@GeneratedValue注释,例如。 @TableGenerator(name=“myTableGen”,table=“xxx”,allocationSize=1,initialValue=1) @GeneratedValue(策略=表格,生成器=“myTableGen”)

因此@TableGenerator的属性可以解释如下: 名称:唯一的生成器名称,可由一个或多个类引用作为id值的生成器。 表:存储主键值的表 pkColumnName:表中存储主键值的列

参考是


然而@TableGenerator意味着使用一个单独的表来保存生成的ID。如果您不想产生这种开销,只想在ID列中生成值,那么您可以在使用@GeneratedValue(strategy=javax.persistence.GenerationType.Identity)时使用其他生成器类型,例如Sequence或Identity

,Hibernate本身以以下格式创建表Hibernate:create table EMPLOYEE(id integer not null自动递增,加入日期not null,名称varchar(50)not null,工资小数点(10,2)not null,SSN varchar(255)not null,主键(id))错误:不成功:创建表EMPLOYEE(id integer not null自动递增,加入日期not null,名称varchar(50)not null,工资小数点(10,2)not null,SSN varchar(255)不为空,主键(id))错误:“auto_increment”附近的语法不正确。如果我手动创建表并运行应用程序,它工作正常,但当我在Hibernate中定义要创建表时,会出现如上所述的错误。Hibernate配置为:Hibernate.dialen=org.Hibernate.dialen.mysqldialent Hibernate.show_sql=true Hibernate.format\u sql=true hibernate.hbm2ddl.auto=create我可以知道我需要在hibernate中定义什么配置吗?看起来你定义的方言是错误的:
org.hibernate.dialogue.mysqldialogue
,所以它是使用
MySQL
语法创建表的。改为尝试
org.hibernate.dialogue.sqlserverdialogue
。正如建议的那样,我使用了d、 但是hibernate正在创建上面的表。当使用@GeneratedValue(strategy=javax.persistence.GenerationType.IDENTITY)时,hibernate自己以下面的格式创建表hibernate:创建表EMPLOYEE(id integer非null自动递增,Join非null日期非null,NAME varchar(50)非null,工资小数(10,2)非null,SSN varchar(255)不为空,主键(id))错误:不成功:创建表EMPLOYEE(id整数不为空自动递增,加入日期不为空,名称varchar(50)不为空,工资小数(10,2)不为空,SSN varchar(255)不为空,主键(id))错误:“auto_increment”附近的语法不正确。如果我手动创建表并运行应用程序,它工作正常,但当我在Hibernate中定义要创建表时,会出现如上所述的错误。Hibernate配置为:Hibernate.dialen=org.Hibernate.dialen.mysqldialent Hibernate.show_sql=true Hibernate.format\u sql=true hibernate.hbm2ddl.auto=create我可以知道我需要在hibernate中定义什么配置吗?看起来您定义的方言不正确:
org.hiberna