0
@Idとしてオブジェクトを使用しようとしていますが、HibernateはそのオブジェクトをAttributeConverterを使って記述された対応するプリミティブ型に変換していないようです。HibernateオブジェクトID
create table ris_exam (id varbinary(255) identity not null, ...)
@Idとしてオブジェクトを使用しようとしていますが、HibernateはそのオブジェクトをAttributeConverterを使って記述された対応するプリミティブ型に変換していないようです。HibernateオブジェクトID
create table ris_exam (id varbinary(255) identity not null, ...)
テーブルを作成するときに、基本的な列の折り返しで遊ぶしたい場合は、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型が含まれます。あなたがそのようにそれを設計することができますどのような
あなたが考慮するためだけのオプション..
? –
私の方法では、情報のない、チェックされていない長い型の代わりにオブジェクトExamIdを使用できます。また、私はいつか私はすべてのメソッドのパラメータを更新する必要はありませんが、ExamIdとAttributeConverterオブジェクトを編集するだけで何か他のものに切り替えるしたいと思います。 – BenoitD