Не удается установить UUID для @Embeddable с помощью SpringBoot - PullRequest
0 голосов
/ 19 февраля 2019

Я бы хотел создать промежуточную таблицу для отношения @ManyToMany с дополнительным столбцом.На данный момент я использую базу данных H2, MariaDB / MySQL планируется, когда выйдет в эфир.У меня есть классы:

UserEntity

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class UserEntity {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    private UUID id;

    @OneToMany(mappedBy = "userEntity",
            cascade = CascadeType.ALL,
            orphanRemoval = true)
    private Set<VoteEntity> votedRoutes = new HashSet<>();
}

RouteEntity

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class RouteEntity {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    private UUID id;
    ...

    @OneToMany(mappedBy = "routeEntity",
            cascade = CascadeType.ALL,
            orphanRemoval = true)
    private Set<VoteEntity> votedUsers = new HashSet<>();
}

, и у меня есть VoteEntity чтобы держать их вместе:

@Data
@NoArgsConstructor
@Entity
public class VoteEntity {
    @EmbeddedId
    private VoteEntityID id;

    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    @MapsId("userId")
    private UserEntity userEntity;

    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    @MapsId("routeId")
    private RouteEntity routeEntity;

    //... additional stuff
}

и встраиваемый класс VoteEntityID для идентификатора:

@Embeddable
@Data
@NoArgsConstructor
public class VoteEntityID implements Serializable {
    private UUID userId;
    private UUID routeId;
}

Я пытаюсь добавить голос от UserServiceс методом

public void addVote(String userEmail, Route route) {
    UserEntity userEntity = findByEmail(userEmail);
    RouteEntity routeEntity = routeService.map(route);

    VoteEntity voteEntity = new VoteEntity();
    voteEntity.setUserEntity(userEntity);
    voteEntity.setRouteEntity(routeEntity);

    userEntity.getVotedRoutes().add(voteEntity);
    routeEntity.getVotedUsers().add(voteEntity);

    userRepository.save(userEntity);
    routeService.save(routeEntity);
}

каждый раз, когда я пытаюсь создать идентификатор, я получаю сообщение об ошибке:

Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] threwисключение

[Ошибка обработки запроса;вложенное исключение - org.springframework.orm.jpa.JpaSystemException: не удалось установить значение поля [ff5ea4d4-1834-45e6-b30d-beec2b376a42] с помощью отражения:
[class package.VoteEntityID.routeId] setter package.VoteEntity.routeId;вложенное исключение: org.hibernate.PropertyAccessException: не удалось установить значение поля [ff5ea4d4-1834-45e6-b30d-beec2b376a42] с помощью отражения: [class package.VoteEntityID.routeId] установщик package.VoteEntityID.routeId] с коренной причиной j.lang.NullPointerException: ноль в java.base / jdk.internal.reflect.UnsafeFieldAccessorImpl.ensureObj (UnsafeFieldAccessorImpl.java:57) ~ [na: na] ... ...

я действительно могуне могу понять :( Я использую аннотацию @Data Lombok, в которой есть @Setter. Любая идея, почему передается значение null, чтобы обеспечитьObj?

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