ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hibernate에 참여하여 연관 부분을 명시 적으로 나타낼 필요가 있습니까?
    카테고리 없음 2020. 8. 17. 01:54

    질문

    나는 훈련 과제로 친구를 돕고 있었다. 방법은 다음과 같습니다.

    일대일 관계에 연결된 사용자자동차의 두 항목이 있습니다.

    @Entity
    @Table(name = "users")
    public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    //
    
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "id")
    private Car car;

    자동차 등급 :

    @Entity
    @Table(name = "cars")
    public class Car {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;
    
    @Column(name = "name")
    private String name;
    
    @OneToOne(mappedBy = "car")
    private User user;
    
    @Override
    public User getUserByAutoName(String name) {
       User user = sessionFactory.getCurrentSession()
            .createQuery("SELECT u from User u JOIN Car c on u.id = c.id where c.name = :n", User.class)
            .setParameter("n", name)
            .getSingleResult();
    return user;

    아시다시피 연관 부분을 명시 적으로 나타낼 필요는 없습니다.

    on u.id = c.id

    Hibernate는 우리를 위해 내부적으로이를 수행합니다. 하지만이 예에서는 내가하지 않으면 망가집니다.이 순간을 정리하는 데 도움을 줄 수 있습니까? :)


    답변1

    사용자 @Entity가 @JoinColumn 을 사용하면 쿼리 자체에 조인 기준을 명시 적으로 지정할 필요가 없습니다. @JoinColumn을 지정하지 않은 경우 쿼리 자체에서 조인 기준을 명시 적으로 만들어야합니다.

    @JoinColumn 주석은 엔터티 간의 기본 / 외래 키 관계를 나타냅니다. 흥미롭게도 최대 절전 모드 Document 는 설명 정보를 제공하지 않습니다. 그것을 사용하는 방법에.

    연관성을 지정하지 않은 예를 제공 할 수 있습니까? 나는 당신의 질문에서 그것을 볼 수 없습니다. 어느 쪽이든 .createQuery에 대해 이것을 시도하는 것이 좋습니다.

    ...
     .createQuery(
      "SELECT u 
       from User u 
       join u.car c 
       where u.name = :n", User.class)
    ...


    답변2

    조인에 대한 참조로 사용할 필드를 정확하게 지정하지 않았기 때문입니다. Userclass에 @OneToOne Car car 라는 필드가 있다고 가정하면 대신 다음 쿼리를 시도해야합니다.

    SELECT u FROM User u JOIN u.car as c WHERE c.name = :n


    답변3

    그것을 시도하십시오 :

    User user = sessionFactory.getCurrentSession()
        .createQuery("SELECT u from User u JOIN u.car as car where car.name = :n", User.class)
        .setParameter("n", name)
        .getSingleResult();

    Car는 User 엔티티의 속성이기 때문에



     

     

     

     

    출처 : https://stackoverflow.com/questions/62678462/is-it-necessary-to-explicitly-indicate-association-part-by-joining-in-hibernate

    댓글

Designed by Tistory.