Hibernate GenericGenerator未生成值

Hibernate GenericGenerator未生成值,hibernate,jpa,Hibernate,Jpa,我有一个带有@GenericGenerator的实体: @Entity public class Report { @Id @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "examrequisitions")) // @GeneratedValue(strategy = Ge

我有一个带有
@GenericGenerator
的实体:

@Entity
public class Report {
    @Id
    @GenericGenerator(name = "generator", strategy = "foreign",
            parameters = @Parameter(name = "property", value = "examrequisitions"))
    // @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(nullable = false, unique = true)
    private Long id;

    ... // outcome, status
}
保存该实体时,会显示以下异常:

Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' cannot be null
Error Code: 1048
Call: INSERT INTO SystemCardiologyReports.REPORTS (ID, OUTCOME, STATUS) VALUES (?, ?, ?)
    bind => [3 parameters bound]
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' cannot be null

为什么ID
null
-尽管有
@GenericGenerator

一个
GenericGenerator
注释只是在代码中的某个地方声明了一个生成器。您可以将其添加到任何包、类型、字段或方法中。这并不意味着生成器应该用于带注释的元素

您需要将
@GeneratedValue
添加到要使用它的字段中,并按其名称引用它:

@Id
@GenericGenerator(name = "genericGenerator" ...))
@GeneratedValue(generator = "genericGenerator")
private Long id;

我认为错误信息很清楚:它缺少实体的id。您没有将
@GeneratedValue(generator=“generator”)
添加到您的ID中。仅
@GenericGenerator
并不表示要为ID生成值。我认为您读得不好,“模型报告”的起始行包含它。您的意思是
/@GeneratedValue(strategy=GenerationType.IDENTITY)
?您应该检查
/
(=行注释)的定义。即使没有注释,你也不是在引用生成器。老兄,我不想粗鲁,但我当然知道//的意思,现在我来问你:你看到这行被注释的是身份而另一行不是身份吗?当然,正如我所问的,我正在尝试根据selectOneMenu生成一个id<代码>@GenericGenerator(name=“generator”,strategy=“foreign”,parameters=@Parameter(name=“property”,value=“examrequisitions”)对我来说,它没有注释。=)伙计,真的感谢你的帮助,它现在工作了,我以为我发布了GeneratedValue注释,这是因为我多次更改代码,所以我感到困惑。对不起,非常感谢。没问题。我从你的问题中删去了不相关的信息,以帮助有类似问题的人。