2011-09-26 2 views
2

SQLite 데이터베이스에서 Hibernate를 사용하고 있습니다. 다음 클래스가 있습니다 :단일 컬럼 테이블에 문제가있는 Hibernate insert

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
public abstract class Authority { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int idAuthority; 
(...) 

다음 Author를 확장하고 4 개 또는 5 개의 필드를 추가하는 클래스 작성자가 있습니다.

Hibernate: insert into Authority values () 

그리고 SQLite는 그렇게 좋아하지 않는다 : 내가 저자 객체를 저장하려고하면 는, Hibernate는 다음과 같은 요청을 생성합니다.

"개인 문자열 테스트"와 같은 더미 문자열 필드를 추가하고 생성자에서이 속성을 설정하면 모든 것이 잘 동작합니다.

나는 최대 절전 모드가 새로 생겼으므로 어떻게 진행해야할지 모르겠다. 너는 어떤 생각을 가지고 있니?

편집 : 요청으로, 저자 클래스의 매핑 :

@Entity 
@Table(name="Authors") 
@PrimaryKeyJoinColumn(name="idAuthority") 
public class Author extends Authority { 

    @Column(name = "firstName") 
    protected String firstName; 
    @Column(name = "lastName") 
    protected String lastName; 
    @Column(name = "alias") 
    protected String alias; 
(...) 
} 

편집 : 요청으로 (비스), 삽입 코드 : 공상

public void save(Object data) { 
    currentSession.saveOrUpdate(data); 
} 

아무것도 .. 그리고 더 많은 가능한 리드를 제공하기 위해 여기 데이터베이스 스키마가 있습니다 :

create table Authority (idAuthority integer, primary key (idAuthority)) 
create table Authors (alias varchar, firstName varchar, 
lastName varchar, idAuthority bigint not null, primary key (idAuthority)) 

N.B. : SQLite에서 기본 키 인 정수는 자동으로 AUTO-INCREMENT로 설정됩니다.

제기 예외이 하나입니다

java.sql.SQLException: near ")": syntax error 

요청이 더 같이해야한다 : SQLite는 수 있도록 권한 값으로 (NULL)를 삽입 할의 자동 증가하지 이상한 "권한 값으로 삽입 () ".

편집 : 이것은 최대 절전 모드 패키지에 대한 SqlLite의 문제입니다. 난 그냥 HSQLDB로했는데, 그것은 나에게 적절한 쿼리를 제공합니다 (: P하지만 매우 다른 이유, 그리고 너무 실패)

insert into Authority (idAuthority) values (default) 

합니다.

다른 DB를 사용하는 것 외에 다른 방법으로이 문제를 해결할 수 있을지 모르겠습니다.

+0

는 저자의 매핑을 붙여, 그래서 우리는 그것을 볼 수 있습니다, 감사 – ssedano

+0

당신은 (Authority''클래스) public으로'idAuthority'을 시도 수 plz 수 있습니까? – Santosh

+0

@ 산 토쉬 : 시도했지만 작동하지 않았다. – Raveline

답변

0

을 사용하는 경우 Authority 클래스와 연관된 테이블에 idAuthority와 연관된 열이 있어야하며 Author 클래스와 연관된 테이블에는 Authority를 ​​나타내는 table의 기본 식별자에 대한 외래 키인 idAuthority와 연관된 열이 있어야합니다. 테이블 관계 accociation에 필요합니다.

0

ID 재정의를 시도하십시오.

@Entity 
@Table(name="Authors") 
@PrimaryKeyJoinColumn(name="idAuthority") 
@AttributeOverride(name="idAuthority", [email protected](name="id")) 
public class Author extends Authority { 

    @Column(name = "firstName") 
    protected String firstName; 
    @Column(name = "lastName") 
    protected String lastName; 
    @Column(name = "alias") 
    protected String alias; 
    (...) 

}

+0

작동하지 않았지만 제대로 수행했는지 확신 할 수 없습니다. 재정의는 Author 클래스에서 수행됩니다. – Raveline

+0

그런 식으로 시도했지만 작동하지 않았지만 공란에 빈 값을 삽입합니다. (하지만 나는 AttributeOverride 덕분에 너에게 배웠다 :)) – Raveline

관련 문제