2016-08-29 10 views
3

OrmLite 5.0이있는 Postgres 9.4 데이터베이스에서 기본 키로 UUID를 사용하고 싶습니다.OrmLite 및 Postgres에서 UUID를 기본 키로 처리하는 방법은 무엇입니까?

같은 테이블보기 :

package test; 

import java.util.UUID; 

import com.j256.ormlite.field.DatabaseField; 
import com.j256.ormlite.field.DataType; 
import com.j256.ormlite.table.DatabaseTable; 

@DatabaseTable(tableName = "test") 
public class Test 
{ 
    @DatabaseField(generatedId = true, dataType = DataType.UUID_NATIVE) 
    private UUID id; 
    @DatabaseField 
    private String text; 

    public Test() 
    {} 

    public UUID getId() 
    { 
     return this.id; 
    } 
    public void setId(UUID id) 
    { 
     this.id = id; 
    } 
    public String getText() 
    { 
     return this.text; 
    } 
    public void setText(String text) 
    { 
     this.text = text; 
    } 
} 

내가 내 객체를 생성 :

Test t = new Test(); 
t.setText("testing"); 

myDao.create(t); 

그러나 나는 다음과 같은 오류가 있습니다

관련 POJO로

CREATE TABLE "test"(
    "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(), 
    "text" TEXT 
) 

org.postgresql.util.PSQLException: ERROR: column "id" is of type uuid but expression is of type character varying 
Hint: You will need to rewrite or cast the expression. 

좋아요, 의사는 OrmLite가 개체를 만들기 전에 (generatedId 덕분에) UUID를 생성하고 VARCHAR로 삽입하려고하면 실패합니다. 그러나 나는 내 애플 ID를 변경할 수 없도록하려면, 그래서 필드는 읽기 전용으로 만들 :

@DatabaseField(generatedId = true, dataType = DataType.UUID_NATIVE, readOnly = true) 

대, 삽입 작업을하지만, 객체에 설정 한 ID가에서 생성 된 ID 아니다 데이터베이스 (OrmLite 생성 ID).

어떻게 작동합니까?

내가 UUID 외래 키를 가질 것이고 OrmLite가 그들을 처리해야하기 때문에 OrmLite로 네이티브 Postgres UUID 필드에 쓸 수 있어야합니다.

답변

1

이미 데이터베이스에 모든 정의가 있습니다. ORM이 ID를 제공하지 않으면 올바르게 생성됩니다. 따라서 ORM이 자신의 ID를 생성하지 못하도록 막는 것이 좋습니다. 그런

뭔가 도움이 될 수 있습니다 : 예상대로

@DatabaseField(dataType = DataType.UUID_NATIVE, readOnly = true) 
+0

그것은 때문에'generatedId' 플래그없이 작동하지 않습니다, 생성 된 개체의 ID 필드가 자동으로 삽입 한 후 채워지지 않습니다. 게다가 OrmLite가 어떤 필드가 객체의 키인지 알지 못하는 사이에 OrmLite가 외래 키를 제대로 처리 할 수 ​​있다고 생각하지 않습니다. (외래 키 관리가 필요합니다). – Val

+0

(또한 OrmLite가 UUID Postgres 필드에 쓸 수 있어야합니다) – Val