私は、2つのレガシーデータベーステーブルを持って、このような簡略化された方法でレイアウトさき:(休止状態)
MASTER SLAVE
ident ident
sName sName
sNumber sNumber
sDesc sValue
----- ------
Java Class 'ScenarioMaster' Java Class 'ScenarioSlave'
各行は、サロゲートを持っていますインデックスはident
列を使用しますが、MASTER.key
とSLAVE.key
の間には関係がありません。ただし、MASTER
テーブルの場合、1つのsName/sNumberペアの一意性はtrueです。したがって、これは可能かつ意味のある複合キー(私はそれらが悪であることを知っています)です。
は、実際には、1がある:Nの関係はSLAVE
テーブルの各MASTER
行参照N行を意味します。上記の列の記述を考えると、可能な人口は、私は私のJavaクラスでは、この関係を反映することができるか、休止状態を使用して今
MASTER SLAVE
100 42
'labl' 'labl'
1 1
'some label' 0.1
43
'labl'
1
0.2
、だろうか?すでにを更新するときScenarioMaster
では、私は
<bag name="slaves" cascade="all">
<key>
<column name="sName" not-null="true"/>
<column name="sNumber" not-null="true"/>
</key>
<one-to-many class="ScenarioSlave"/>
</bag>
これを含めることができScenarioMaster
ため
private List<ScenarioSlave> slaves = new ArrayList<ScenarioSlave>();
などの公共ゲッター/セッターのhibernate-マッピングで設定またはリストを宣言し、しかし、strage UPDATE文を作成し、エンティティScenarioMaster
エンティティsession.saveOrUpdate(scenarioMaster)
を使用しています。
// create master scn and slave slv
scn.addSlave(slv);
session.saveOrUpdate(scn);
Hibernate:
update
SLAVE
set
sNumber=?,
sName=?,
sValue=?
where
sName=?
and sNumber=?
Hibernate:
update
SLAVE
set
sName=null,
sNumber=null
where
sName=?
and sNumber=?
私は間違っていますか?その2回目のアップデートはどこから来たのですか? 私はsName/sNumberと何か関係があると思います。ScenarioSlave
のキーではありません。私は、なぜ、理解できないのですか。 SNAME/sNumberパラメータが有効な値にポイントを行うと、私はsaveOrUpdate
を通じて持続したいScenarioMaster
インスタンスが実際にslaves
リストにnull以外のScenarioSlave
インスタンスを持っていることを
は注意してください。
EDIT:複合キーがこのマッピング私は本当にテーブルのようなものに「labl」をマッピングしNAMENUMBER_KEY
、1を作成したくない
<composite-id name="keyId" class="ScenarioKeyId">
<key-property name="name" access="field" column="sName"
type="string" length="20"/>
<key-property name="number" access="field" column="sNumber"
type="long"/>
</composite-id>
を使用して別のクラスに延期されます'key_labl1'これは、次に、休止状態にid
として使用することができます。これは、(実際のテーブルを使わずに)休止状態がするものです。
私たちのうちの2人(ユニークなIDカラムの導入について) – Schildmeijer
私はそのソリューションを使用/使用する唯一の人ではないことを知っておいてください。 DB設計の観点からすると、少しイライラしますが、実際に問題を改善します。 –
あなたはそのアプローチについて詳しく説明できますか? '複合キーテーブルに一意のID列'が指定されていると、テーブルを変更しますか?私はこれをすることができないのではないかと心配していますが、これもあなたがしたことではないのです。 – msi