具有自定义默认值的EclipseLink JPA主键

Joe*_*013 4 jpa eclipselink

我的SQL Server数据库中有一个表,其中主键字段定义NEWID()为默认值.期望是客户端不需要传递主键字段值,SQL服务器将处理它.

在JPA定义我的模型类时,我必须使用生成类型定义此ID字段.我试过IDENTITY,TABLESEQUENCE发电机.不幸的是我收到了错误

Exception Description: Error preallocating sequence numbers.  
The sequence table information is not complete..
Run Code Online (Sandbox Code Playgroud)

我的坚持.XML如下

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="LOB_Webservice" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>com.xyz.lob.model.jpa.OrderDetail</class>
    <class>com.xyz.lob.model.jpa.OrderHeader</class>
    <shared-cache-mode>NONE</shared-cache-mode> 
    <properties>
        <property name="jboss.as.jpa.providerModule" value="org.eclipse.persistence"/>
        <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1433;databaseName=LOB_INT" /> 
        <property name="javax.persistence.jdbc.user" value="sa" /> 
        <property name="javax.persistence.jdbc.password" value="*******" /> 
        <property name="eclipselink.logging.level" value="FINE"/>       
        <property name="eclipselink.sharedCache.mode" value="None"/>
        <property name="eclipselink.jdbc.cache-statements" value="false" />  
        <property name="eclipselink.query-results-cache" value="false"/>    
        <property name="eclipselink.logging.exceptions" value="true"/>  
        <property name="eclipselink.weaving" value="static"/>       
    </properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)

我的Model类如下

@Entity
public class OrderHeader implements Serializable {
@Id
@Basic(optional = false)    
@GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="OrderId")
    private String orderId;        
    ...
}
Run Code Online (Sandbox Code Playgroud)

iul*_*anr 6

嗨@ Joe2013不确定是否仍然是一个问题,但是当使用表生成器并且您未指定Eclipse链接根据对象模型生成模式时,您必须手动创建表并且还插入相应生成器的行和它们的初始值.否则它将无法工作,您将收到您提到的错误.

  • 解决方案是创建一个名为sequence的表,并填充:(SEQ_GEN_TABLE,0).create语句:CREATE TABLE`sequence`(`SEQ_NAME` varchar(50)NOT NULL,`SEQ_COUNT` decimal(38,0)DEFAULT NULL,PRIMARY KEY(`SEQ_NAME`))ENGINE = InnoDB DEFAULT CHARSET = utf8; (2认同)