我正在学习 this 教程,您可以直接从数据库创建 JSF CRUD 应用程序(从数据库生成实体类,然后从实体类生成 JSF 页面)。
当我尝试将此应用到我的 MSSQL 数据库时,当我尝试在 PK 设置为“Is Identity”且“Identity Increment”设置为的表中插入记录时,在生成 JSF 页面后遇到问题1.
这是我的 JSF 创建页面:
idActivityRiskType 是我的自动增量 PK。因此,当我尝试保存没有 idActivityRiskType 值的记录时,我收到验证错误“IdActivityRiskType 字段为必填项”。 ' 当我尝试设置 PK 的值(假设为 10)时,我收到以下错误:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'activityrisktype' when IDENTITY_INSERT is set to OFF.
Error Code: 544
Call: INSERT INTO activityrisktype (idActivityRiskType, name, riskValue, idCustomerType) VALUES (?, ?, ?, ?)
bind => [4 parameters bound]
Query: InsertObjectQuery(com.cmsss.mavenproject1.jpa.entities.Activityrisktype[ idActivityRiskType=10 ])
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:331)
在寻找解决方案时,我尝试将表的 IDENTITY_INSERT 设置为 ON,但这不起作用:
设置 IDENTITY_INSERT xxx.[xxx].[活动风险类型] ON
有没有办法能够从我的实体类生成考虑到这个问题的 JSF 页面。如果没有,我该如何解决这个问题?
好吧,看来我找到了解决方法并且效果很好......
第一步:修改实体类中的注解:
@Id @Basic (optional = false) @NotNull @GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY) @Column (name = "idActivityRiskType") private Integer idActivityRiskType;
第2步:修改Create.xhtml以将CSS类添加到id字段(以便能够在页面加载时隐藏它)
第 3 步:加载时将字段的值设置为某个整数值(这样验证就不会触发)并向用户隐藏
$( document ).ready(function() { $('.autoInsert').val(1); $('.autoInsert').hide(); });
现在效果很好