Ссылка на неизвестный объект: java.lang.Integer - PullRequest
0 голосов
/ 21 апреля 2019

у меня простой @Entity класс

@Entity
@Table(name = "user")
@Getter       
class User {
    @Id
    @GeneratedValue
    private final Integer userID;    
    private final String username;   
}

И еще один, который должен содержать внешний ключ к нему

@Getter
@Builder
@Entity
class Task {
    @Id
    @GeneratedValue
    private final Integer taskID;

    private final String title;
    private final String details;

    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinTable(name = "user", joinColumns = {@JoinColumn(name = "userID")})
    private final Integer userID;
}

Суть в том, что классы User и Task находятся в отдельных пакетах, и оба имеют область видимости пакета. Значит я не могу просто написать

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinTable(name = "user", joinColumns = {@JoinColumn(name = "userID")})
private final User user;

И вот почему я получаю

@OneToOne or @ManyToOne on com.johndoe.teamplanner.task.domain.Task.userID references an unknown entity: java.lang.Integer

Есть ли обходной путь, чтобы достичь того, что мне нужно? Создать отношения между двумя объектами, которые находятся в отдельных пакетах и ​​с областью действия пакета?

1 Ответ

0 голосов
/ 21 апреля 2019

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

  • Очевидный вариант: изменить метод доступа класса User на public.Но, если вы спросили, это, вероятно, потому, что вы не могли изменить его, потому что у вас нет исходного кода.
  • Декомпилируйте файл User .class, чтобы получить исходный код.Если пользователь не такой сложный, вы можете попробовать это.Затем измените метод доступа на public.
  • Создайте свою собственную версию класса User и используйте свою для обеспечения устойчивости, а другую - для предоставляемых им функций.
  • Отобразите userID в Task классе просто как Integer и гарантируйте кодом, что вы никогда не назначаете значение, которое не является действительным идентификатором пользователя: @Column private Integer userID;.Если вы используете JPA для генерации таблиц, вам нужно вручную добавить внешний ключ в базу данных, чтобы обеспечить целостность ваших данных.

Я надеюсь, что некоторые из этих решений могут помочь.

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