QueryDSL Сгенерированные классы, не имеющие доступа к элементам второго уровня для запросов
Я использую QueryDSL с Spring Data JPA в моем проекте Java и имею Сгенерированные файлы с использованием QueryDSL maven plugin для использования классов QueryDSL Model, сгенерированных им. Это отлично работает, когда я использую его для вложенных объектов одного уровня, однако, если я пытаюсь получить доступ к объектам доступа второго уровня, он дает исключение NullPointerException, сохраняя объект модели 2-го уровня, не инициализируется.
Поблагодарили бы за помощь.
Я получаю исключение NullPointerException в третьей строке qmachine.vendor имеет значение null.
QTransaction qtransaction = QTransaction.transaction;
QMachine qmachine = qtransaction.machine;
BooleanExpression vendorexp = qmachine.vendor.vendor.eq(machineType);
Мои классы сопоставления ниже:
Транзакция
@Entity
@Table(name = "dsdsd")
public class Transaction extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "machine_id")
private Machine machine;
}
И класс Machine:
@Entity
@Table(name="machine")
public class Machine extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name="vendor_id")
private Vendor vendor;
}
а класс Vendor -
@Entity
@Table(name="vendors")
public class Vendor extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@Column(name="vendor")
@Enumerated(EnumType.STRING)
private VendorType vendor;
}
Я намеренно упускал геттеры и сеттеры.
Ответы
Ответ 1
По умолчанию инициализируется только первый уровень. См. Этот раздел документации для параметров инициализации: http://www.querydsl.com/static/querydsl/3.6.0/reference/html/ch03s03.html#d0e2192
Полная окончательная инициализация невозможна с конечными полями из-за возможности бесконечных циклов, но Querydsl также предоставляет возможность методов доступа к ресурсам.