2017-09-22 2 views
0

@Idとしてオブジェクトを使用しようとしていますが、HibernateはそのオブジェクトをAttributeConverterを使って記述された対応するプリミティブ型に変換していないようです。HibernateオブジェクトID

create table ris_exam (id varbinary(255) identity not null, ...) 
+0

? –

+0

私の方法では、情報のない、チェックされていない長い型の代わりにオブジェクトExamIdを使用できます。また、私はいつか私はすべてのメソッドのパラメータを更新する必要はありませんが、ExamIdとAttributeConverterオブジェクトを編集するだけで何か他のものに切り替えるしたいと思います。 – BenoitD

答えて

0

テーブルを作成するときに、基本的な列の折り返しで遊ぶしたい場合は、Hibernateはこのクエリその後、あなたが最も可能性の高いあなたが使用することはできません考慮に入れなければならないん

@Entity 
@Table(name = "ris_exam") 
public class Exam { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private long examId; 
} 


public class ExamId { 
    private Long id; 
    public ExamId(final Long id) { 
    super(); 
    this.id = id; 
    } 

    public Long getId() { 
    return this.id; 
    } 
} 




@Converter(autoApply = true) 
public class ExamIdCodeAttributeConverter implements AttributeConverter<ExamId, Long> { 

    @Override 
    public Long convertToDatabaseColumn(ExamId arg0) { 
    return arg0.getId(); 
    } 

    @Override 
    public ExamId convertToEntityAttribute(Long arg0) { 
    return new ExamId(arg0); 
    } 
} 

あなたのIDの@GeneratedValue注釈(とにかく私の意見ではコンバータよりも適している@EmbeddedIdを使用して同じことが起こります)。

とにかくその後、私の意見では、あなたが@IdClass機能を試してみたが、クエリをspecifiyingながらExamIdクラスは、特定のエンティティの取得/使用されることを覚えることができる必要がある場合:DAOで

@Entity 
@Table(name = "ris_exam") 
@IdClass(ExamId.class) 
public class Exam { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private long examId; 
} 

ExamId id = new ExamId(1L); 
session.get(Exam.class, id); 

の場合、エンティティにはプレーンなlong型が含まれます。あなたがそのようにそれを設計することができますどのような

あなたが考慮するためだけのオプション..

関連する問題