プロジェクトを作成しました。 MySQLではなくSQL Serverを作成した後、問題が発生します。読み取り、更新、および削除は正常に機能しますが、新しい従業員を作成することはできません。 ベローは、次のとおり SpringMain.javaIDENTITY_INSERTがOFFに設定されていると、 'Employee'テーブルのID列に明示的な値を挿入できません。
public class SpringMain
{
\t public static void main(String[] args)
\t {
\t \t ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
\t \t EmployeeDAO employeeDAO = ctx.getBean("employeeDAOJDBCTemplate", EmployeeDAO.class);
\t \t Employee emp = new Employee();
\t \t emp.setName("Saria");
\t \t emp.setRole("CEO");
\t \t employeeDAO.save(emp);
\t }
}
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
\t xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
\t <bean id="employeeDAO" class="com.journaldev.spring.jdbc.dao.EmployeeDAOImpl">
\t \t <property name="dataSource" ref="dataSource" />
\t </bean>
\t
\t <bean id="employeeDAOJDBCTemplate" class="com.journaldev.spring.jdbc.dao.EmployeeDAOJDBCTemplateImpl">
\t \t <property name="dataSource" ref="dataSource" />
\t </bean>
\t
\t <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
\t \t <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
\t \t <property name="url" value="jdbc:sqlserver://localhost:1433;database=bbb"/>
\t \t <property name="username" value="lm" />
\t \t <property name="password" value="pp" />
\t </bean>
</beans>
Employee.java
@Entity
@Table(name="Employee")
public class Employee
{
\t @Id
\t @GeneratedValue(strategy=GenerationType.IDENTITY)
\t @Column(name = "id", unique = true, nullable = false)
\t private int id;
\t
\t @Column(name = "name")
\t private String name;
\t
\t @Column(name = "role")
\t private String role;
\t
\t public Employee() {}
\t public Employee(int id, String name, String role)
\t {
\t \t this.id = id;
\t \t this.name = name;
\t \t this.role = role;
\t }
}
EmployeeDAOJDBCTemplateImpl
public class EmployeeDAOJDBCTemplateImpl implements EmployeeDAO
{
\t private DataSource dataSource;
\t public void setDataSource(DataSource dataSource)
\t {
\t \t this.dataSource = dataSource;
\t }
\t
\t @Override
\t public void save(Employee employee)
\t {
\t \t String query = "insert into Employee (id, name, role) values (?,?,?)";
\t \t JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
\t \t Object[] args = new Object[] {employee.getId(), employee.getName(), employee.getRole()};
\t \t int out = jdbcTemplate.update(query, args);
\t \t if(out !=0)
\t \t {
\t \t \t System.out.println("Employee saved with id="+employee.getId());
\t \t }
\t \t else System.out.println("Employee save failed with id="+employee.getId());
\t }
}
EmployeeDao.java
public interface EmployeeDAO
{
\t public void save(Employee employee);
}
私はSQL Server上で生成されたクエリは次のとおりです。
CREATE TABLE [bbb].[dbo].[Employee]
(
\t id int IDENTITY(1,1) PRIMARY KEY,
\t name varchar(255) NOT NULL,
\t role varchar(255) NOT NULL
)
後方に表示されます例外ERファイルを実行しているSpringMain.javaは、グーグルの後
Exception in thread "main" org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [insert into Employee (id, name, role) values (?,?,?)]; Cannot insert explicit value for identity column in table 'Employee' when IDENTITY_INSERT is set to OFF.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'Employee' when IDENTITY_INSERT is set to OFF.
\t at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:243)
\t at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
\t at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:658)
\t at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:907)
\t at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:968)
\t at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:978)
\t at com.journaldev.spring.jdbc.dao.EmployeeDAOJDBCTemplateImpl.save(EmployeeDAOJDBCTemplateImpl.java:32)
\t at com.journaldev.spring.jdbc.main.SpringMain.main(SpringMain.java:31)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'Employee' when IDENTITY_INSERT is set to OFF.
\t at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
ですが、私は、私はしかし
SET IDENTITY_INSERT [dbo].[IdentityInsert] ON
を置くために有することを見出し、これはできません例外を解決します。 何が足りないのか教えてください。前もって感謝します。
を行う必要がありますか? – Lamak
私はこれらの2つのクラスを使用しています: – saria
あなたは自分で 'id'の値を挿入したいのですが?手動で挿入する必要がある場合は、IDENTITY_SPECIFICATIONを削除します。明示的に 'id'の値を挿入したいのであれば、 – jonju