Я не могу правильно отформатировать сопоставление JPA OneToMany, чтобы при попытке выполнить запрос к базе данных не возникало ошибок - PullRequest
1 голос
/ 14 февраля 2020

У меня есть две таблицы в моей базе данных: регистрация и шаблоны. Существует отношение один ко многим от регистрации до шаблонов через идентификатор таблицы регистрации. Вот мои таблицы:

Регистрация. java

@Entity
@Table(name = "enrollment")
@XmlRootElement

public class Enrollment implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue
    @Column(name = "id")
    private Integer ID;

    // other columns ...

    @OneToMany(mappedBy = "enrollment")
    private Set<Templates> templates;

    // getters, setters, etc.

}

Шаблоны. java

@Entity
@Table(name = "templates")
@XmlRootElement

public class Templates implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue
    @Column(name = "ID")
    private Integer ID;

    // other columns ...

    @ManyToOne
    @JoinColumn(name = "enrollment_id", nullable = false)
    private Enrollment enrollment;

    // getters, setters, etc.

}

enter image description here

Вот как я получаю свой список Enrollments:

JpaRepository. java

@Override
    public List<Enrollment> findEnrollments() {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Enrollment> enrollmentQuery = criteriaBuilder.createQuery(Enrollment.class);
        Root<Enrollment> enrollmentRoot = enrollmentQuery.from(Enrollment.class);
        Join<Enrollment, Templates> etJoin = enrollmentRoot.join(Enrollment_.templates, JoinType.LEFT);
        enrollmentQuery.select(enrollmentRoot).where(enrollmentRoot.get(Enrollment_.templates).isNotNull());
        List<Enrollment> listOfEnrollments = entityManager.createQuery(enrollmentQuery).getResultList();
        return listOfEnrollments;
    }

Я пытался следовать примеру здесь , но я продолжаю получать ошибки

Exception Description: Object comparisons can only be used with OneToOneMappings. Other mapping comparisons must be done through query keys or direct attribute level comparisons.

в этой строке:

List<Enrollment> listOfEnrollments = entityManager.createQuery(enrollmentQuery).getResultList();

всякий раз, когда я пытаюсь получить все свои регистрации из базы данных.

Кроме того, когда я пытаюсь сохранить Templates, я получаю эту ошибку:

[EL Fine]: sql: 2020-02-14 14:03:29.023--ClientSession(308207273)--Connection(630218544)--Thread(Thread[JavaFX Application Thread,5,main])--UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
    bind => [50, SEQ_GEN]
[EL Fine]: sql: 2020-02-14 14:03:29.078--ClientSession(308207273)--Connection(630218544)--Thread(Thread[JavaFX Application Thread,5,main])--SELECT SEQ_COUNT FROM SEQUENCE WHERE SEQ_NAME = ?
    bind => [SEQ_GEN]
[EL Fine]: sql: 2020-02-14 14:03:29.146--ClientSession(308207273)--Connection(630218544)--Thread(Thread[JavaFX Application Thread,5,main])--INSERT INTO templates (ID, template_bytes, enrollment_id) VALUES (?, ?, ?)
    bind => [451, [B@3af691d4, 127]
[EL Fine]: sql: 2020-02-14 14:03:29.175--ClientSession(308207273)--Thread(Thread[JavaFX Application Thread,5,main])--SELECT 1
[EL Warning]: 2020-02-14 14:03:29.177--UnitOfWork(1188827788)--Thread(Thread[JavaFX Application Thread,5,main])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '451' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO templates (ID, template_bytes, enrollment_id) VALUES (?, ?, ?)
    bind => [451, [B@3af691d4, 127]

Это для некоторых причина, выбор, извлечение, любой неправильный следующий идентификатор из MySQL при попытке вставить, потому что # 451 - это существующий идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...