Hibernate(4.1.8.FINAL)がNULL値を持つリスト(単方向OneToManyマッピング)を返すという問題が発生しています。私は取得しています何Hibernateがnull値を持つリストを返す(List型のOneToManyアノテーション)
: 私はEntryAddressは10日インデックス上にあるとして、21の大きさ、および第二エントリアドレスのリストを取得していますが20日インデックスにあります。
@Entity
@Table(name = "entry")
public class Entry {
...
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "entry_id")
@OrderColumn(name = "precedence")
private List<EntryAddress> addresses;
...
}
ここ
@Entity
@Table(name = "entry_address")
public class EntryAddress {
@Id
@GeneratedValue
@Column(name = "id")
private Integer id;
@Column(name = "entry_id")
private Integer entryId;
@Column(name = "precedence")
private Integer precedence;
...
}
は、MySQLの構造です:
Entry [addresses=[EntryAddress [id=5, entryId=3, precedence=10, line=Line 3.1], EntryAddress [id=6, entryId=3, precedence=20, line=Line 3.2]]]
ここでは最小限のソースコードがあります: -
Entry [addresses=[null, null, null, null, null, null, null, null, null, null, EntryAddress [id=5, entryId=3, precedence=10, line=Line 3.1], null, null, null, null, null, null, null, null, null, EntryAddress [id=6, entryId=3, precedence=20, line=Line 3.2]]]
は私がを期待する私は2つだけEntryAddressオブジェクトのリストを期待します(エンジンInnoDB):
CREATE TABLE entry (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(500) NOT NULL,
active int(1) NOT NULL DEFAULT '0',
modifiedTS timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
createdTS timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
CREATE TABLE entry_address (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
entry_id int(10) unsigned NULL,
precedence int(2) NULL DEFAULT '0',
line varchar(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY entry_address_uq (entry_id , precedence)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"List"を "Set"に置き換えようとすると、コレクションにNULL値はありませんが、シーケンス/優先順位は機能しません。
1つ目のEntryAddressの優先順位を1に設定し、2番目のEntryAddressの優先順位を2に設定すると、2のサイズのListが取得されます。優先順位は、優先順位はソートにのみ使用する必要がありますが、リストの返却です。
私が間違っていることを教えてもらえますか?ありがとうございます:-)
答えを拡大してください。それのどの部分があなたの問題を解決しましたか? @LazyCollection? –