Spring jpa @ OneToMany в одном направлении всегда нулевой - PullRequest
0 голосов
/ 22 ноября 2018
@Data
@Entity
@Table(name = "member")
public class MemberEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToMany
    @JoinColumn(name = "memberId")
    private List<PhoneEntity> phoneEntities;
}


@Data
@Entity
@Table(name = "phone")
public class PhoneEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column
    private Integer memberId;
}


@Repository
public interface MemberRepository extends JpaRepository<MemberEntity, Integer> {

    @Query("select m from MemberEntity m join fetch m.phoneEntities where m.id=?1")
    MemberEntity findByIdWithPhone(Integer id);
}

создать отношение OneToMany от Member до Phone

я пытаюсь выбрать Member получить соединение с Phone, используя @Query("select m from MemberEntity m join fetch m.phoneEntities where m.id=?1") Запрос

, этот запрос созданкак в запросе my-sql

SELECT 
memberenti0_.id as id1_0_0_,
phoneentit1_.id as id1_1_1_,
phoneentit1_.member_id as member_i2_1_1_,
phoneentit1_.member_id as member_i2_1_0__,
phoneentit1_.id as id1_1_0__ 
from member memberenti0_
inner join phone phoneentit1_ on memberenti0_.id=phoneentit1_.member_id
where memberenti0_.id=?

и результат MemberEntity не равен нулю (это означает, что вставка и внутреннее объединение работают!), но MemberEntity#phoneEntities всегда равно нулю

я пытаюсьизменить List<PhoneEntity> Collections<PhoneEntity> Set<PhoneEntity> не работает весь тип коллекции.

Я сомневаюсь, что столбец в таблице Phone дважды вызывает в сгенерированном запросе (member_i2_1_1_, member_i2_1_0__), но я не знаю почему.

1 Ответ

0 голосов
/ 22 ноября 2018

Вы должны исправить свое отображение следующим образом:

@Data
@Entity
@Table(name = "member")
public class MemberEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToMany(
        mappedBy = "member"
    )        
    private List<PhoneEntity> phoneEntities;
}


@Data
@Entity
@Table(name = "phone")
public class PhoneEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ManyToOne(fetch = FetchType.LAZY) // Or Eager 
    @JoinColumn(name = "member_id")
    private MemberEntity member;
}

И нет необходимости указывать соединение в запросе:

@Query("select m from MemberEntity m where m.id=?1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...