我有一张只有一列的桌子。是身份证
我如何在JPA中坚持它?
我尝试过entityManager.persist(新的OneColumnTable());
它抛出一个PersistenceException
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-6023] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.QueryException
Exception Description: **The list of fields to insert into the table [DatabaseTable(OneColumnTable)] is empty. You must define at least one mapping for this table.**
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:747)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.flush(EntityManagerWrapper.java:418)我该怎么做呢?
更新
@Entity
@Table(name = "OneColumnTable")
public class OneColumnTable implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "OneColumn")
private Integer oneColumn;
public OneColumnTable() {
}
public Integer getOneColumn() {
return oneColumn;
}
public void setOneColumn(Integer oneColumn) {
this.oneColumn= oneColumn;
}
}表
USE [myDB]
GO
/****** Object: Table [dbo].[OneColumnTable] Script Date: 07/15/2011 12:10:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[OneColumnTable](
[OneColumn] [bigint] IDENTITY(1,1) NOT NULL,
PRIMARY KEY CLUSTERED
(
[OneColumn] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]发布于 2011-07-15 14:59:04
DataNucleus可以很好地保持这个类。对于某些RDBMS来说,INSERT语句必须是特定类型的,当没有指定列时(因为您的唯一列是在数据存储中生成的),这大概是它无法做到的。对于SQLServer,任何适当的JPA实现都应该生成的语句是"INSERT INSERT {tbl}默认值“。也许能得到一个这样的实现?
发布于 2011-07-15 15:03:33
@GeneratedValue(strategy=GenerationType.IDENTITY)表示依赖于database support for IDENTITY columns的排序策略的使用。
IDENTITY列的概念并不存在于所有数据库中。例如,Apache和Oracle不支持这一点,而MySQL、MSSQL (通常是Sybase)支持身份排序策略。您应该使用数据库支持的排序策略。为便于移植,请选择AUTO或TABLE排序策略。在大多数JPA提供程序中,AUTO策略是作为TABLE排序策略实现的,因为所有数据库都支持创建用于维护序列值的表。
https://stackoverflow.com/questions/6708512
复制相似问题