クラス User オブジェクトがあります。Hibernate を使用してデータベースからこのオブジェクトをロードしようとしています。私のSQL文は次のとおりです。
SELECT
users.uid AS uid,
users.deleted AS deleted,
users.username AS username,
users.passwd AS passwd,
users.disabled AS disabled,
users.lockout AS lockout,
users.expires AS expires,
data_firstname.value AS firstname,
data_lastname.value AS lastname
FROM
ac_users as users
LEFT JOIN
ac_userdef_data as data_firstname
ON
users.uid = data_firstname.parentuid AND
data_firstname.fieldname like 'firstname'
LEFT JOIN
ac_userdef_data as data_lastname
ON
users.uid = data_lastname.parentuid AND
data_lastname.fieldname like 'lastname'
WHERE
users.deleted = 0
User クラスの私のマッピングは次のとおりです。
<class name="com.agetor.commons.security.User" table="ac_users">
<id name="uid" column="uid" type="long" >
<generator class="native"/>
</id>
<property name="deleted" column="deleted" />
<property name="username" column="username" />
<property name="password" column="passwd" />
<property name="firstname" column="firstname" />
<property name="lastname" column="lastname" />
<property name="disabled" column="disabled" />
<property name="lockout" column="lockout" />
<property name="expires" column="expires" />
</class>
私の問題は、テーブル ac_users に列 'firstname' または 'lastname' がないことです。これらの列は、SQL 結合ステートメントからの結果セットにのみ存在します。また、ac_userdef_data テーブルにも存在しません。そこには、フィールド名と値の 2 つの列があります。および 2 行: fieldname = 'firstname' で値の列に値があり、別の行で fieldname = 'lastname' で値の列に値がある
マッピング ファイルを変更して、Hibernate が POJO の firstname および lastname フィールドに firstname および lastname 列をロードする必要があることを理解するようにしますが、これらの列は参照される ac_users テーブルに実際には存在しません。