сохранить таблицу с 1 столбцом, используя JPA - PullRequest
3 голосов
/ 15 июля 2011

У меня есть таблица только с одним столбцом. Это Id

Как я могу сохранить это с 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]

Ответы [ 2 ]

1 голос
/ 15 июля 2011

DataNucleus может сохранять этот класс в порядке.Дело в том, что для некоторых СУБД оператор INSERT должен иметь определенный тип, когда столбцы не указаны (поскольку в хранилище данных создается только ваш единственный столбец), и это, по-видимому, то, что он не может сделать.В случае SQLServer утверждение, которое должна генерировать любая приличная реализация JPA, это «INSERT INTO {tbl} DEFAULT VALUES».Возможно получить реализацию, которая делает это?

0 голосов
/ 15 июля 2011

@GeneratedValue(strategy=GenerationType.IDENTITY) указывает на использование стратегии секвенирования, которая зависит от поддержки базы данных для IDENTITY столбцов .

Концепция столбцов IDENTITY присутствует не во всехбазы данных.Например, Apache Derby и Oracle не поддерживают это, в то время как MySQL, MSSQL (и обычно Sybase), поддерживает стратегию секвенирования IDENTITY.Вы должны использовать стратегию секвенирования, которая поддерживается вашей базой данных.Для мобильности выберите стратегии секвенирования AUTO или TABLE.В большинстве поставщиков JPA стратегия AUTO реализована как стратегия секвенирования TABLE, поскольку все базы данных поддерживают создание таблицы для поддержки значений последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...