- PR -

DBテーブルとJavaクラスのマッピング

投稿者投稿内容
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-04-19 01:26
RDBMSによって識別子がケースセンシティブだったりしますね。
照合順の設定とかで変わったりとか・・・
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-04-19 10:31
通常はCase Insensitiveでも、CREATE TABLEのときに二重引用符で囲っておけばCase SensitiveになってくれるRDBMSは多い(というかSQL標準)ので、それを使えばJava方式と統一できますが、そうするとSELECT文とか記述するときも常にテーブル名・カラム名を二重引用符で囲わないといけないので、それも面倒です。
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2007-04-19 11:40
引用:

DDL で vendorId と書いても、DBMS のユーザーインタフェースを通すと VENDORID になったりするので悩ましいです。



EJB3.0 はよくわからないのでお訊きしたいのですが、
DDLで、
コード:
 vendorId integer,
 vendorName varchar(100)


と記述して、
Java 側で、
コード:
 @Column(name="vendorId")
 private int vendorId;
 @Column(name="vendorName")
 private Stirng vendorName;


とするのは、問題あるのでしょうか(EJB3.0 JPAのルールに違反しているとか)?

私も普段S2DAO 使っているので、
コード:
 private int vendorId;
 private Stirng vendorName;


でOKなんですよね。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-04-19 11:52
引用:

flatlineさんの書き込み (2007-04-19 11:40) より:
引用:

DDL で vendorId と書いても、DBMS のユーザーインタフェースを通すと VENDORID になったりするので悩ましいです。



EJB3.0 はよくわからないのでお訊きしたいのですが、
DDLで、
コード:
 vendorId integer,
 vendorName varchar(100)


と記述して、
Java 側で、
コード:
 @Column(name="vendorId")
 private int vendorId;
 @Column(name="vendorName")
 private Stirng vendorName;


とするのは、問題あるのでしょうか(EJB3.0 JPAのルールに違反しているとか)?



いえ、それは問題ないです。

多分でゅうくさんが言っている「DBMS のユーザーインタフェース」というのは、OracleやMS SQL ServerのEnterprise Manager(名前同じじゃん)みたいなツールのことです。自分でSQL書く分にはいいのですが、そういうツールで例えばテーブルのリストや、テーブル定義を見ようとすると、全部大文字(または小文字)で表示されるので、単語区切りがないと非常に見辛いのです。
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2007-04-19 13:24
引用:

flatlineさんの書き込み (2007-04-19 11:40) より:
とするのは、問題あるのでしょうか(EJB3.0 JPAのルールに違反しているとか)?


カーニーさんのおっしゃる通りのことを言いたかった訳ですよ。単に見辛いと。
言葉足らずでごめんなさい。

しかも、引用でケースセンシティブになるのを知りませんでした。
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2007-04-19 13:35
引用:

カーニーさんのおっしゃる通りのことを言いたかった訳ですよ。単に見辛いと。
言葉足らずでごめんなさい。



なるほど、納得です。確かに、そういうツールだと見づらいですね。
Oracle だと、テーブルとかカラムにコメント付けられなかったでしたっけ?
そういうので何とかできるといいな、と思いつつ、試したことはないです。

普段、開発/保守している範囲では、Enterprise Manager みたいなツールは
あまり使わないです。ユーザの作成や、表領域の操作では使いますが、
テーブル関係は、ほとんどSQL投げて終わりなので、あまりそういう点で
悩んだことはないです。

引用:

しかも、引用でケースセンシティブになるのを知りませんでした。



同じく知りませんでした(^^;
勉強になります。

カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-04-19 14:08
やっぱり今までのルールは変えずに、@Table(name="...")、@Column(name="...")で、丁寧に名前を指定してあげるのがよいように思えてきた・・・。

単数形 or 複数形もやっぱり違和感が残るし。
概念的に、クラスって「型」じゃないですか。なので名前は単数形。
テーブルは「集合」だから、複数形がぴったりくるんですよね・・・。

こういうのもインピーダンスミスマッチと言うんだろか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-04-20 00:49
クラス:テーブル
インスタンス:行
と考えると、あんまり違和感なかったりしません?

行の集合によって複数形になっても、
テーブル自体は概念と考えればクラスと同じように単数形と考えてしまいますね。


ところでテーブル名やカラム名をアッパーキャメルケースにすると、
確かに管理ツールの類では見難いですね。


あと、私がJavaと同じ名前を使うのにはもう1つ理由があって、
名前の類はコピペしたいからというのがあります。
タイプミスによるリトライや、ここの名前って何だっけ?って考える時間を、
極力減らすという目的です。
さらに言うとエディタによってはアンダスコア区切りだと、
名前をダブルクリックしたときに、名前が全て区切られなかったりしますね。
コピペがしにくい気がします。

スキルアップ/キャリアアップ(JOB@IT)