2011-07-15 35 views
3

我有一張只有一列的表。這是一個Id使用JPA堅持1列表

我該如何堅持JPA?

我試過了entityManager.persist(new 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) 

我該怎麼辦呢?

UPDATE

@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] 
+3

向我們展示您的實體類。 –

+0

我剛更新過。 thx – pringlesinn

+0

你很想做到這一點似乎很奇怪。我還沒有發現一個能理解插入到OneColumnTable()values();'中的RDBMS。也許這裏有一個設計問題。 –

回答

1

DataNucleus將能堅持該類罰款。對於某些RDBMS,當沒有指定任何列時(因爲在數據存儲中只生成唯一的列),INSERT語句必須是特定的類型,這大概是它不能做的。在SQLServer的情況下,任何合適的JPA實現都應該生成的語句是「INSERT INTO {tbl} DEFAULT VALUES」。也許得到一個這樣做的實現?

0

@GeneratedValue(strategy=GenerationType.IDENTITY)指示使用取決於database support for IDENTITY columns的測序策略。

IDENTITY列的概念不存在於所有數據庫中。例如,Apache Derby和Oracle不支持這一點,而MySQL,MSSQL(通常是Sybase)則支持IDENTITY排序策略。您應該使用數據庫支持的排序策略。爲便於攜帶,請選擇AUTOTABLE排序策略。在大多數JPA提供商中,AUTO策略實施爲TABLE排序策略,因爲所有數據庫都支持創建維護序列值的表。

+0

我'已經嘗試AUTO,SEQUENCE,TABLE和IDENTITY。沒有成功:( – pringlesinn

+0

我的數據庫是SQLServer – pringlesinn

+0

是否有更大的堆棧跟蹤?據我所見,沒有針對EclipseLink的開放的錯誤至於在MSSQL中關注的IDENTITY排序對於這種行爲,我看不出這個簡單的例子會失敗,不幸的是,我沒有訪問MSSQL實例,所以我需要查看EclipseLink的源代碼來幫助你;這就是爲什麼我會對確定失敗確切位置的堆棧跟蹤感興趣。 –