Я использую EJB и JPA, и когда я пытаюсь получить доступ к PhoneNumber
объектам в phoneNumbers
атрибуте Contact contact
, иногда это может занять несколько минут, чтобы он действительно вернул данные. Он просто не возвращает никаких телефонных номеров, даже нулевых, а затем, через некоторое время, когда я снова его вызываю, он волшебным образом появляется.
Вот так я получаю доступ к данным:
for (Contact c : contactFacade.findAll()) {
System.out.print(c.getName()+" "+c.getSurname()+" : ");
for (PhoneNumber pn : c.getPhoneNumbers()) {
System.out.print(pn.getNumber()+" ("+pn.getDescription()+"); ");
}
}
Я использую сессионный фасад ejb, сгенерированный netbeans (основные методы CRUD).
Он всегда печатает правильное имя и фамилию, номера телефонов и описание печатаются только через некоторое время (меняется) от его создания через фасад. Я предполагаю, что это как-то связано с транзакциями. Как это решить?
Это мои объекты JPA:
контакт
@Entity public class Contact implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String surname;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "contact")
private Collection<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();
PhoneNumber
@Entity
public class PhoneNumber implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String number;
private String description;
@ManyToOne()
@JoinColumn(name="CONTACT_ID")
private Contact contact;