保持记录增量 jpa-sqlite sqlite

Posted

技术标签:

【中文标题】保持记录增量 jpa-sqlite sqlite【英文标题】:keep records increment jpa-sqlite sqlite 【发布时间】:2014-01-03 20:48:07 【问题描述】:

我的问题是,当我保存一个人时,人记录的 id 为 1,地址 2,当我保存另一条记录时,人的 id 为 3,住所 4 等增加,我想增加为应该是记录谁是 1 和 for of registered prox 1 for registration is 2 and 2 next 3 and 3 依此类推。

然后我留下实体的源代码、主要内容、要保留的方法以及创建表时为我提供控制台的内容。我正在为 sqlite dirver 使用 netbeans 7.4 和 EclipseLink 库 jpa2.1 和 jdbc

@Entity
public class Persona implements Serializable 
    protected static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    private Long id;
    private String nombre;
    @OneToOne (cascade = CascadeType.ALL)
    private Domicilio domicilio;     

    public Persona() 

    

    public Persona(String nombre) 
        this.nombre = nombre;
        domicilio= new Domicilio();
    

    public Domicilio getDomicilio() 
        return domicilio;
    

    public void setDomicilio(Domicilio domicilio) 
        this.domicilio = domicilio;
    

    public String getNombre() 
        return nombre;
    

    public void setNombre(String nombre) 
        this.nombre = nombre;
    

    public Long getId() 
        return id;
    

    public void setId(Long id) 
        this.id = id;
    

实体住所:

@Entity
public class Domicilio implements Serializable 
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String calle;

    public Domicilio() 
    

    public Domicilio(String calle) 
        this.calle = calle;
    

    public String getCalle() 
        return calle;
    

    public void setCalle(String calle) 
        this.calle = calle;
    

    public Long getId() 
        return id;
    

    public void setId(Long id) 
        this.id = id;
    

在 PersonaJpaController 类中找到用于保存记录的方法

public void guardar()
    persona= new Persona("angel");
    persona.getDomicilio().setCalle("alpatacal");
    create(persona);

这是我的主程序

public class Pruebaentidades 
    /**
     * @param args the command line arguments
     */
    public  static void main(String[] args) 
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("pruebaentidadesPU");
        EntityManager em = emf.createEntityManager();// create tables 

        PersonaJpaController p= new PersonaJpaController(Persistence.createEntityManagerFactory("pruebaentidadesPU"));
        p.guardar();
    

这就是我在创建表格时为我提供控制台的原因

[EL 信息]:2014-01-03 17:27:01.189--ServerSession(24979675)--EclipseLink,版本:Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5 [EL 信息]:连接:2014-01-03 17:27:01.379--无法检测供应商名称 [SQLite3] 的平台。默认为 [org.eclipse.persistence.platform.database.DatabasePlatform]。使用的数据库方言可能与您正在使用的数据库不匹配。请使用属性 eclipselink.platform.class.name 明确提供平台。 [EL 信息]:连接:2014-01-03 17:27:01.446--ServerSession(24979675)--file:/C:/Users/VM/Desktop/Mis Proyectos/Proyectos Netbeans/pruebaentidades/build/classes/_pruebaentidadesPU登陆成功 [EL 警告]:2014-01-03 17:27:01.6--ServerSession(24979675)--异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions .DatabaseException 内部异常:java.sql.SQLException:“CONSTRAINT”附近:语法错误 错误代码:0 调用:ALTER TABLE PERSONA ADD CONSTRAINT FK_PERSONA_DOMICILIO_ID FOREIGN KEY (DOMICILIO_ID) REFERENCES DOMICILIO (ID) 查询:DataModifyQuery(sql="ALTER TABLE PERSONA ADD CONSTRAINT FK_PERSONA_DOMICILIO_ID FOREIGN KEY (DOMICILIO_ID) REFERENCES DOMICILIO (ID)")

【问题讨论】:

我想您可能需要注意该日志跟踪中的“Not able to detect platform for vendor name [SQLite3]. Defaulting to [org.eclipse.persistence.platform.database.DatabasePlatform]. The database dialect used may not match with the database you are using. Please explicitly provide a platform using property eclipselink.platform.class.name”... 【参考方案1】:

对于那些有同样问题的人,我想说解决问题的方法是为每个表创建一个序列并使用策略生成序列。 为每个实体添加这些语句,允许我为每个表创建一个序列

实体角色:

@GeneratedValue(策略 = GenerationType.SEQUENCE,生成器 = "PERS_SEQ") @SequenceGenerator ( name = "PERS_SEQ" , sequenceName = "PERS_SEQ")

实体住所:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DOM_SEQ") @SequenceGenerator ( name = "DOM_SEQ" , sequenceName = "DOM_SEQ")

【讨论】:

以上是关于保持记录增量 jpa-sqlite sqlite的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 上实现增量搜索

Android SQLite DB 何时关闭

SQLite 自动增量 - 如何插入值?

SQLite 自动增量不起作用

使用 WHERE 子句的 SQLite 更新和增量

用整数替换 sqlite.net “bigint” 以实现自动增量主键约束