JSF CRUD Netbeans 教程 - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表中插入标识列的显式值

问题描述 投票:0回答:1

我正在学习 this 教程,您可以直接从数据库创建 JSF CRUD 应用程序(从数据库生成实体类,然后从实体类生成 JSF 页面)。

当我尝试将此应用到我的 MSSQL 数据库时,当我尝试在 PK 设置为“Is Identity”且“Identity Increment”设置为的表中插入记录时,在生成 JSF 页面后遇到问题1.

这是我的 JSF 创建页面:

enter image description here

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 页面。如果没有,我该如何解决这个问题?

java jsf netbeans jsf-2
1个回答
0
投票

好吧,看来我找到了解决方法并且效果很好......

第一步:修改实体类中的注解:

@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(); 
});

现在效果很好

© www.soinside.com 2019 - 2024. All rights reserved.