Вот как проблема возникает:Hibernate: слияние дает нулевые значения в БД
скажем, у меня есть объект A, который содержит список объектов B. я первый упорствовать в A, содержащий 1 B. Тогда я извлечение этого объекта A (с помощью find), я добавляю новый объект B в его список, и я делаю слияние по A. Когда я нахожу на своем объекте A, я получаю свой первый объект B, который хорошо сохранился, но второй имеет только нулевые поля.
Обратите внимание, что эти B-объекты являются экземплярами класса FPML, сгенерированного из XML-описания библиотеки.
Пожалуйста, дайте мне знать, если что-то отсутствует в моих объяснениях.
Update:
Проблема возникает с объектами InstrumentId.
@Test
public void testInstrumentIdPersistenceAndUpdate() throws Exception {
InstrumentId instrumentId = InstrumentIdUtils.produceInstrument("SX5E:IND", InstrumentIdScheme.BLOOMBERG);
UnderlyingDefinition underlyingDefinition1 = new UnderlyingDefinition();
underlyingDefinition1.setSymbol("SX5E:IND");
underlyingDefinition1.setCurrency(CurrencyUtils.EUR);
underlyingDefinition1.addInstrumentId(instrumentId);
ProductDefinition productDefinition1 = new ProductDefinition("PUT");
productDefinition1.addInstrumentDefinition(underlyingDefinition1);
Universe universe = new Universe();
universe.addProductDefinition(productDefinition1);
universe.setName("channel.test-3");
universe.setUri(new URI("urn:mapp3.channel.test-3"));
entityManager.persist(universe);
InstrumentId instrumentId1 = InstrumentIdUtils.produceInstrument("NES:IND", InstrumentIdScheme.BLOOMBERG);
underlyingDefinition1.addInstrumentId(instrumentId1);
entityManager.merge(universe);
InstrumentId instrumentId2 = InstrumentIdUtils.produceInstrument("TOCH:IND", InstrumentIdScheme.BLOOMBERG);
underlyingDefinition1.addInstrumentId(instrumentId2);
// entityManager.merge(universe);
Universe u = entityManager.find(Universe.class, "urn:mapp3.channel.test-3");
}
проецируемый файл
<entity name="InstrumentId" class="org.fpml.v57.InstrumentId">
<table name="T_INSTRUMENT_ID"/>
<attributes>
<id name="value" access="PROPERTY">
<column name="VALUE" length="100"/>
</id>
<id name="instrumentIdScheme" access="FIELD">
<column name="INSTRUMENT_ID_SCHEME" length="100"/>
</id>
</attributes>
</entity>
здесь генерируемый POJO
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "InstrumentId", propOrder = {
"value"
})
public class InstrumentId
extends ModelObject
implements Serializable
{
@XmlValue
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String value;
@XmlAttribute(name = "instrumentIdScheme", required = true)
@XmlSchemaType(name = "anyURI")
protected String instrumentIdScheme;
_ «Пожалуйста, дайте мне знать, если в моем объяснении чего-то не хватает». _ При всем моем уважении все в вашем объяснении отсутствует. Поместите некоторый код для начала. –
дайте мне знать, если мое обновление поможет ... – Oleg
Да, это гораздо лучше, я думаю. Было бы не больно показывать соответствующие сопоставления. _ "... но второй имеет только нулевые поля." _ Все поля? В том числе ПК? Как вы проверили, что поля «null» (вы уверены, что не проверяли прокси-сервер Hibernate с отладчиком IDE)? –