Вот что вы видите в окне «Часы»:
a = 0 = 0x00 = 0x0000 = 0x00 0000 = 0x0000 0000
b = 167772160 = 16777216 * 10 = 0x1000000 * 0x0A = 0xA000000
c = 655360 = 65536 * 10 = 0x10000 * 0x0A = 0xA0000
d = 10 = 0x0A = 0x0000 000A
Что это значит? Это означает, что ваш компилятор выполнил свою работу, но ваш отладчик читает c
и b
как двойные слова (4 байта) вместо байтов.
Когда он читает в b
, он считывает свое значение 0x00
, значение c
0x0000
и d
сверху 0x0A
, вместе сделав его 0xA000000
.
Подобное происходит с c
. a
повезло, так как следующие 4 байта равны нулю, поэтому a
действительно равен нулю.
Однако это не всегда так. Ничто не говорит о том, что после d
не может быть никакого мусора, не говоря уже о том, что переменные, равные нулю, могут появляться в .bss
(в совершенно другой ячейке памяти).
Преимущество использования JAXB заключается в том, что это стандартная среда выполнения с несколькими реализациями (как и JPA).
Если вы используете EclipseLink JAXB (MOXy), то у вас есть множество расширений для обработки сущностей JPA, включая двунаправленные отношения. Это делается с помощью аннотации MOXy @XmlInverseReference. Он действует аналогично @XmlTransient при маршале и заполняет отношения "цель-источник" при демаршале.
http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JPA/Relationships
@Entity
@XmlRootElement
public class Contact {
@Id
private Long contactId;
@OneToMany(mappedBy = "contact")
private List<ContactAddress> addresses;
...
}
@Entity
@XmlRootElement
public class ContactAddress {
@Id
private Long contactAddressId;
@ManyToOne
@JoinColumn(name = "contact_id")
@XmlInverseReference(mappedBy="addresses")
private Contact contact;
private String address;
...
}
Доступны и другие расширения, включая поддержку составных ключей и встроенных классов ключей.
Чтобы указать реализацию EcliseLink MOXy JAXB, вам необходимо включить файл jaxb.properties в классы вашей модели (т.е. контракт) со следующей записью:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Эта страница в «Неофициальном руководстве JAXB» предлагает три стратегии работы с циклами. Вот они (вкратце):
просто посмотрите этот учебник: Отображение циклических ссылок на XML с помощью jaxb
Я использую его, и он хорошо работает :)