seam-gen で既存のDBからコードを起こす場合に、DBで今までふられていたId等の処理の対応が問題になります。 Hibernate のマニュアルやら、Annotationのマニュアルやら読みながら、「どうしたら良いのか」いろいろいじってみました。
@Entityの@Idには@GeneratedValueを使うみたいです。 マニュアルから、@Generatedが使えるのかと思っていましたが、NPEが出ます。
PostgreSQLの場合下のような感じです。 (PostgreSQLのserialをDBでは使っていますので、sequenceにすると冗長な処理 select nextval('??')が発生していますが、やむを得ません。)
また、これで入力画面(デフォルトで出来た物なのでIdの入力欄が有る)でIdを指定するとエラーになります。 また、ブランク(NULL)だとエラーが出ます。 デフォルトで0が表示されていますが、この状態で、他の項目を入力すると、ちゃんと続き番号を取ってきて入れてくれています。
Idをふるケースはこれで良いのですが、triggerを使ってtimestampしている所は、どうしたら良いのか、また少し実験してみることにします。
入力は日本語で出来るのですが、searchの所に日本語入れると化けるので、これも原因を調べて直さなければなりません。
seam は楽しい(楽)けど、ちゃんと思い通りに使えるようになるのにはもう少々お時間が掛かりそう、、、、
/**
* Users generated by hbm2java
*/
@Entity
@Table(name = "users", schema = "public")
public class Users implements java.io.Serializable {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_GEN")
@SequenceGenerator(name="SEQ_GEN",sequenceName="users_id_seq", allocationSize=1)
^^^^^^^^^
ここに、serial で作られたsequeceの名前を入れる
@Column(name = "id", unique = true, nullable = false, insertable=false, updatable=false)
@NotNull
private int id;
@Column(name = "name", nullable = false)
@NotNull
private String name;
@Column(name = "address", nullable = false)
@NotNull
private String address;
: : : :
(getter/setter が続く)
0 件のコメント:
コメントを投稿