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注释,这是因为我多次更改代码,所以我感到困惑。对不起,非常感谢。没问题。我从你的问题中删去了不相关的信息,以帮助有类似问题的人。