hibernate.AnnotationException: Property of @IdClass not found in entity & This class does not define an IdClass

284
16 сентября 2021, 03:00
@NoRepositoryBean
//@Repository
public interface StudentInCourseRepository
//        extends JpaRepository<StudentInCourse, Long>
        extends CrudRepository<StudentInCourse, Long>
{
    List<StudentInCourse> findByCourse(Course course);
}

только по @NoRepo проходит компиляция... последствия пока не знаю.

@Getter
@Setter
@EqualsAndHashCode()
@ToString()
@NoArgsConstructor
@Table(name = "student")
@Entity
public class StudentImpl extends Person implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "student_id")
    private Long id;
    private String typeLearn;

@Getter
@Setter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "name")
@Table(name = "courses")
public class Course implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
@Getter
@Setter
@EqualsAndHashCode
@ToString
@NoArgsConstructor
@Builder
@Table(name = "student")
@Entity
public class Student implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "student_id")
    private Long id;
    private String typeLearn;

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

This class [class com.example.demo.model.learn.StudentInCourse] does not define an IdClass

@Getter
@Setter
@Entity
@NoArgsConstructor
@EqualsAndHashCode
@Table(name = "students_courses")
public class StudentInCourse implements Serializable {
    public StudentInCourse(StudentImpl student, Course course) {
        this.student = student;
        this.course = course;
    }
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "fk_id")
    private Long id;
//    @EmbeddedId
//    private StudentIdentity studentIdentity;
    private Integer score = 0;
    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "student_id")
    private StudentImpl student;
    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "course_id")
    private Course course;

 //пробовал разное,  
 @EmbeddedId
 private StudentIdentity studentIdentity; 
//на отдельный класс. 

может надо вот это? Третья стратегия, GenerationType.TABLE, не зависит от поддержки конкретной базой данных и хранит счётчики значений в отдельной таблице. С одной стороны это более гибкое и настраиваемое решение, с другой стороны более медленное и требующее большей настройки. Вначале требуется создать (вручную!) и проинициализировать (!) таблицу для значений ключей:

от 1 до 12 (вот это я не понял)

CREATE TABLE JOURNAL
(
    ID BIGINT PRIMARY KEY
);
CREATE TABLE SEQ_STORE
(
 SEQ_NAME VARCHAR(255) PRIMARY KEY,
 SEQ_VALUE BIGINT NOT NULL
);
INSERT INTO SEQ_STORE VALUES ('JOURNAL.ID.PK', 0);

Затем создать генератор и связать его со идентификатором:

    @Id
    @TableGenerator( name = "seqStore", table = "SEQ_STORE", pkColumnName = "SEQ_NAME", pkColumnValue = "JOURNAL.ID.PK", valueColumnName = "SEQ_VALUE", initialValue = 1, allocationSize = 1 )
    @GeneratedValue( strategy = GenerationType.TABLE, generator = "seqStore" )
    @Getter
    @Setter
    @Column(name = "id", nullable = false, updatable = false)
    private Long rowId;
    @TableGenerator принимает кучу аргументов:

name — имя этого конкретного генератора table — имя таблицы, в которой он хранит текущие значения ключей pkColumnName — имя столбца, в котором хранятся имена значений ключей pkColumnValue — имя ключа, используемого в этом генераторе valueColumnName — имя столбца, в котором хранятся значения ключей

или нет? самый нижний способ отсюда: https://easyjava.ru/data/jpa/pervichnye-klyuchi-v-jpa/ тоже не помог - но ошибка изменилась - меня послали в

public class StudentInCourse implements Serializable {
    public StudentInCourse(StudentImpl student, Course course) {
        this.student = student;
        this.course = course;
    }
    @EmbeddedId
    @JoinColumn(name = "sc_id")
    private CourseIdentity courseIdentity;
public class CourseIdentity implements Serializable {
    static final long serialVersionUID = 1L;
    @NotNull
    @Size(max = 20)
    private String studentFirstName;
    @NotNull
    @Size(max = 20)
    private String studentLastName;

Property of @IdClass not found in entity com.example.demo.model.learn.StudentInCourse: studentFirstName
org.hibernate.AnnotationException: Property of @IdClass not found in entity com.example.demo.model.learn.StudentInCourse: studentFirstName

мне обязательно надо в последствии работать с одним полем промежуточной таблицы , чтобы полю не участвующему в связи манитумани засетать инт. который по умолчанию равен 0. есть идеи? способы? или просто через сессию в спринге квайри на таблицу фильтр по курсу - хватать студентов. и каждому полю где студент - ставить оценку.... p.s. а таблица то и поля создаются, в идее вижу, трогаю(

CREATE TABLE students_courses ( courseId varchar(255) NOT NULL, studentId varchar(255) NOT NULL, create_date datetime DEFAULT NULL, score int(11) DEFAULT NULL, student_id bigint(20) NOT NULL, course_id bigint(20) NOT NULL, id bigint(20) NOT NULL, fk_id bigint(20) NOT NULL, PRIMARY KEY (courseId,studentId,student_id,course_id), KEY FKjgn1a7o3aubvog47ij9cjvgha (student_id), KEY FKcc42107lsifo5rjyjlhdu6i6u (course_id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

мне нужен будет доступ к полю score. и вообще доставать лист , тоесть DAO класс

READ ALSO
Как добавить guava библиотеку?

Как добавить guava библиотеку?

Как добавить guava библиотеку в Intellij Idea проект?

104
Как реализовать уведомления android

Как реализовать уведомления android

Такой вопрос, как реализовать уведомления когда приложение открыто только звуковое уведомление, а когда приложение скрыто (кнопкой Home), то push уведомление

141
Дженерики. Ошибка Error:(2, 25) java: generic array creation

Дженерики. Ошибка Error:(2, 25) java: generic array creation

Почему при такой записи компилятор не ругается:

196
Выборка из трёх связанных таблиц

Выборка из трёх связанных таблиц

Есть 3 таблицы (postgreSQL):

144