2007年7月5日木曜日

Seam (2.0b) と @Generated

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 件のコメント:

PCをWindows11にアップグレード(ハードもRyzen9 9900x+4070TiSに)

remBG(背景を消すPysonのユーティリティ)を弄っていたら、記事に書かれているのと比べてやたらスピードが遅いので、購入履歴を調べてみると、3~4年経ってしまっている。  ここは、奮起して、Ryzen9 9900x+Asus Prime X870-P WIFI-CSM +As...