Вот короткий ответ: структура является рекордной структурой: каждый элемент в структуре выделяет новое место. Так, структура как
struct foobarbazquux_t {
int foo;
long bar;
double baz;
long double quux;
}
выделяет [по крайней мере 112] байты в памяти для каждого экземпляра. ("По крайней мере", потому что ограничения выравнивания архитектуры могут вынудить компилятор дополнить структуру.)
, С другой стороны,
union foobarbazquux_u {
int foo;
long bar;
double baz;
long double quux;
}
выделяет один блок памяти и дает ему четыре псевдонима. Так sizeof(union foobarbazquux_u) ≥ max((sizeof(int),sizeof(long),sizeof(double),sizeof(long double))
, снова с возможностью некоторого дополнения для выравнивания.
Решено с помощью
<set name="someSet" table="B" lazy="false">
<key column="B_not_primary" property-ref="secondary_column" />
<one-to-many class="BClass" />
</set>