Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 461
1

Spring data jpa не сопоставляет свойства связей OneToMany

08.01.2021, 12:11. Показов 2057. Ответов 4

Здравствуйте!

Помогите найти ошибку, уже всё перерыл не могу понять.
Было 4 сущности, добавил ещё 2 (Request and Response), до их добавления всё работало. Возникает проблема со связью OneToMany между 2-мя добавленными сущностями Request and Response, судя по стеку ошибки, но при этом связь эту прописывал, как было указано в офдоках (https://www.baeldung.com/hibernate-one-to-many):

Кликните здесь для просмотра всего текста
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestRepository' defined in com.vs.authorizationService.repository.RequestRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.vs.authorizationService.entity.Response.Requests in com.vs.authorizationService.entity.Request.responses
at org.springframework.beans.factory.support.BeanDefinitionValu eResolver.resolveReference(BeanDefinitionValueResolver.java: 342)
at org.springframework.beans.factory.support.BeanDefinitionValu eResolver.resolveValueIfNecessary(BeanDefinitionValueResolve r.java:113)
at org.springframework.beans.factory.support.AbstractAutowireCa pableBeanFactory.applyPropertyValues(AbstractAutowireCapable BeanFactory.java:1697)
at org.springframework.beans.factory.support.AbstractAutowireCa pableBeanFactory.populateBean(AbstractAutowireCapableBeanFac tory.java:1442)
at org.springframework.beans.factory.support.AbstractAutowireCa pableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFac tory.java:593)
at org.springframework.beans.factory.support.AbstractAutowireCa pableBeanFactory.createBean(AbstractAutowireCapableBeanFacto ry.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactor y.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBe anRegistry.getSingleton(DefaultSingletonBeanRegistry.java:23 4)
at org.springframework.beans.factory.support.AbstractBeanFactor y.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactor y.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBea nFactory.getBeansOfType(DefaultListableBeanFactory.java:624)
at org.springframework.beans.factory.support.DefaultListableBea nFactory.getBeansOfType(DefaultListableBeanFactory.java:612)
at org.springframework.data.repository.config.DeferredRepositor yInitializationListener.onApplicationEvent(DeferredRepositor yInitializationListener.java:51)
at org.springframework.data.repository.config.DeferredRepositor yInitializationListener.onApplicationEvent(DeferredRepositor yInitializationListener.java:36)
at org.springframework.context.event.SimpleApplicationEventMult icaster.doInvokeListener(SimpleApplicationEventMulticaster.j ava:172)
at org.springframework.context.event.SimpleApplicationEventMult icaster.invokeListener(SimpleApplicationEventMulticaster.jav a:165)
at org.springframework.context.event.SimpleApplicationEventMult icaster.multicastEvent(SimpleApplicationEventMulticaster.jav a:139)
at org.springframework.context.support.AbstractApplicationConte xt.publishEvent(AbstractApplicationContext.java:404)
at org.springframework.context.support.AbstractApplicationConte xt.publishEvent(AbstractApplicationContext.java:361)
at org.springframework.context.support.AbstractApplicationConte xt.finishRefresh(AbstractApplicationContext.java:898)
at org.springframework.context.support.AbstractApplicationConte xt.refresh(AbstractApplicationContext.java:554)
at org.springframework.boot.web.servlet.context.ServletWebServe rApplicationContext.refresh(ServletWebServerApplicationConte xt.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApp lication.java:758)
at org.springframework.boot.SpringApplication.refresh(SpringApp lication.java:750)
at org.springframework.boot.SpringApplication.refreshContext(Sp ringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplica tion.java:315)
at org.springframework.boot.web.servlet.support.SpringBootServl etInitializer.run(SpringBootServletInitializer.java:173)
at org.springframework.boot.web.servlet.support.SpringBootServl etInitializer.createRootApplicationContext(SpringBootServlet Initializer.java:153)
at org.springframework.boot.web.servlet.support.SpringBootServl etInitializer.onStartup(SpringBootServletInitializer.java:95 )
at org.springframework.web.SpringServletContainerInitializer.on Startup(SpringServletContainerInitializer.java:172)
at org.apache.catalina.core.StandardContext.startInternal(Stand ardContext.java:5166)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.j ava:183)
... 43 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.vs.authorizationService.entity.Response.Requests in com.vs.authorizationService.entity.Request.responses
at org.springframework.beans.factory.support.AbstractAutowireCa pableBeanFactory.initializeBean(AbstractAutowireCapableBeanF actory.java:1794)
at org.springframework.beans.factory.support.AbstractAutowireCa pableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFac tory.java:594)
at org.springframework.beans.factory.support.AbstractAutowireCa pableBeanFactory.createBean(AbstractAutowireCapableBeanFacto ry.java:516)
at org.springframework.beans.factory.support.AbstractBeanFactor y.lambda$doGetBean$0(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.DefaultSingletonBe anRegistry.getSingleton(DefaultSingletonBeanRegistry.java:23 4)
at org.springframework.beans.factory.support.AbstractBeanFactor y.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactor y.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.BeanDefinitionValu eResolver.resolveReference(BeanDefinitionValueResolver.java: 330)
... 74 more
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.vs.authorizationService.entity.Response.Requests in com.vs.authorizationService.entity.Request.responses
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToMan ySecondPass(CollectionBinder.java:844)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass( CollectionBinder.java:795)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(Collecti onSecondPass.java:53)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.pr ocessSecondPasses(InFlightMetadataCollectorImpl.java:1693)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.pr ocessSecondPasses(InFlightMetadataCollectorImpl.java:1661)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess .complete(MetadataBuildingProcess.java:286)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderI mpl.metadata(EntityManagerFactoryBuilderImpl.java:1224)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderI mpl.build(EntityManagerFactoryBuilderImpl.java:1255)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersist enceProvider.createContainerEntityManagerFactory(SpringHiber nateJpaPersistenceProvider.java:58)
at org.springframework.orm.jpa.LocalContainerEntityManagerFacto ryBean.createNativeEntityManagerFactory(LocalContainerEntity ManagerFactoryBean.java:365)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean .buildNativeEntityManagerFactory(AbstractEntityManagerFactor yBean.java:391)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
... 3 more


Если в этих сущностях я убираю связь ними 2-ми, то Spring начинает ругаться на связь 1-ой добавленной сущности (Request) и User, которая уже была ранее.

Сами сущности:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name="Requests")
public class Request {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="Id_request")
    private Integer idRequest;
 
    @ManyToOne
    @JoinColumn(name="User_id_request", nullable=true)
    private User userRequest;
 
    @Column(name="Request_text")
    private String requestText;
 
    @Column(name="Created_date_request")
    private Date createdDateRequest;
 
    @OneToMany(mappedBy="Requests")
    private List<Response> responses;
}
 
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name="Responses")
public class Response {
 
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="Id_response")
    private Integer idResponse;
 
    @ManyToOne
    @JoinColumn(name="Id_request", nullable=true)
    private Request request;
 
    @ManyToOne
    @JoinColumn(name="User_id_response", nullable=false)
    private User userResponse;
 
    @Column(name="Response_text")
    private String responseText;
 
    @Column(name="Created_date_response")
    private Date createdDateRequest;
 
    @Column(name="Updated_date_response")
    private Date updatedDateResponse;
}
 
@Data
@AllArgsConstructor
@Entity
@Table(name="Users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="Id_users")
    private long id_Users;
    @Column(name="Login")
    private  String login;
    @Column(name="Password")
    private String password;
    @Transient
    transient private String confirmPassword;
    @Column(name="Word_Coder")
    private String wordCoder;
    @Column(name="Status")
    private Status status;
    @Column(name="Email")
    private String email;
    @Column(name="First_name")
    private String firstName;
    @Column(name="Last_name")
    private String lastName;
    @Column(name="Created_date")
    private Date createdDate;
    @Column(name="Updated_date")
    private Date updatedDate;
 
    @OneToMany(mappedBy="User")
    private List<Request> requests;
 
    @OneToMany(mappedBy="User")
    private List<Response> responses;
 
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "Data_user_id", referencedColumnName = "Id_data_user")
    private UserData userData;
 
    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "User_roles", joinColumns = {@JoinColumn(name="User_id")},
    inverseJoinColumns = {@JoinColumn(name = "Role_id")})
    private List<Role> roles;
 
    public User(long id_Users, String firstName, String lastName) {
        this.id_Users = id_Users;
        this.firstName = firstName;
        this.lastName = lastName;
    }
 
    public User() {
    }
}
Сами сущности у меня создаются в likuibase:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<changeSet id="1.0.0" author="vs">
        <createTable tableName="Users">
            <column name="Id_users" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
 
            <column name="Login" type="VARCHAR(100)">
                <constraints nullable="false" unique="true"/>
            </column>
            <column name="Password" type="VARCHAR(1000)">
                <constraints nullable="false"/>
            </column>
            <column name="Word_coder" type="VARCHAR(50)">
                <constraints nullable="false"/>
            </column>
            <column name="Status" type="VARCHAR(25)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
            <column name="Email" type="VARCHAR(256)">
                <constraints nullable="false" unique="true"/>
            </column>
            <column name="First_name" type="VARCHAR(100)">
                <constraints nullable="false"/>
            </column>
            <column name="Last_name" type="VARCHAR(100)">
                <constraints nullable="false"/>
            </column>
            <column name="Created_date" type="TIMESTAMP" defaultValue="CURRENT_TIMESTAMP()">
                <constraints nullable="false"/>
            </column>
            <column name="Updated_date" type="TIMESTAMP" defaultValue="CURRENT_TIMESTAMP()">
                <constraints nullable="true" unique="true"/>
            </column>
            <column name="Data_user_id" type="BIGINT">
                <constraints nullable="true" unique="false"/>
            </column>
 
        </createTable>
    </changeSet>
 
    <changeSet id="1.0.1" author="vs">
        <createTable tableName="Roles">
            <column name="Id_roles" type="INT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="Name" type="VARCHAR(100)">
                <constraints nullable="false" unique="true"/>
            </column>
        </createTable>
    </changeSet>
 
    <changeSet id="1.0.2" author="vs">
        <createTable tableName="User_roles">
            <column name="Id_user_roles" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="User_id" type="BIGINT">
            </column>
            <column name="Role_id" type="INT">
            </column>
        </createTable>
    </changeSet>
 
    <changeSet id="1.0.3" author="vs">
        <createTable tableName="Data_user">
            <column name="Id_data_user" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="INN" type="VARCHAR(12)">
                <constraints nullable="false"/>
            </column>
            <column name="Full_name_company" type="VARCHAR(256)">
                <constraints nullable="true"/>
            </column>
            <column name="Short_name_company" type="VARCHAR(256)">
                <constraints nullable="true"/>
            </column>
            <column name="Name_director" type="VARCHAR(100)">
                <constraints nullable="true"/>
            </column>
            <column name="Patronymic_director" type="VARCHAR(100)">
                <constraints nullable="true"/>
            </column>
            <column name="Family_name_director" type="VARCHAR(100)">
                <constraints nullable="true"/>
            </column>
            <column name="Telefone" type="VARCHAR(12)">
                <constraints nullable="true"/>
            </column>
        </createTable>
    </changeSet>
 
    <changeSet id="1.0.4" author="vs">
        <createTable tableName="Requests">
            <column name="Id_request" type="INT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="User_id_request" type="BIGINT">
                <constraints nullable="true"/>
            </column>
            <column name="Request_text" type="VARCHAR(500)">
                <constraints nullable="true"/>
            </column>
            <column name="Created_date_request" type="TIMESTAMP" defaultValue="CURRENT_TIMESTAMP()">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>
 
    <changeSet id="1.0.5" author="vs">
        <createTable tableName="Responses">
            <column name="Id_response" type="INT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="Id_request" type="INT">
                <constraints nullable="true"/>
            </column>
            <column name="User_id_response" type="BIGINT">
                <constraints nullable="false"/>
            </column>
            <column name="Response_text" type="VARCHAR(500)">
                <constraints nullable="true"/>
            </column>
            <column name="Created_date_response" type="TIMESTAMP" defaultValue="CURRENT_TIMESTAMP()">
                <constraints nullable="true"/>
            </column>
            <column name="Updated_date_response" type="TIMESTAMP" defaultValue="CURRENT_TIMESTAMP()">
                <constraints nullable="true"/>
            </column>
        </createTable>
    </changeSet>
 
 
    <changeSet id="1.0.6" author="vs">
        <addForeignKeyConstraint baseColumnNames="User_id"
                                 baseTableName="User_roles"
                                 constraintName="FK_User_roles_Users"
                                 onDelete="CASCADE"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="Id_users"
                                 referencedTableName="Users"/>
    </changeSet>
 
    <changeSet id="1.0.7" author="vs">
        <addForeignKeyConstraint baseColumnNames="Role_id"
                                 baseTableName="User_roles"
                                 constraintName="FK_User_roles_Roles"
                                 onDelete="CASCADE"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="Id_roles"
                                 referencedTableName="Roles"/>
    </changeSet>
 
    <changeSet id="1.0.8" author="vs">
        <addForeignKeyConstraint baseColumnNames="Data_user_id"
                                 baseTableName="Users"
                                 constraintName="FK_Users_Data_user"
                                 onDelete="SET NULL"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="Id_data_user"
                                 referencedTableName="Data_user"/>
    </changeSet>
 
    <changeSet id="1.0.9" author="vs">
        <addForeignKeyConstraint baseColumnNames="User_id_request"
                                 baseTableName="Requests"
                                 constraintName="FK_Requests_Users"
                                 onDelete="SET NULL"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="Id_users"
                                 referencedTableName="Users"/>
    </changeSet>
 
    <changeSet id="1.0.10" author="vs">
        <addForeignKeyConstraint baseColumnNames="User_id_response"
                                 baseTableName="Responses"
                                 constraintName="FK_Responses_Users"
                                 onDelete="CASCADE"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="Id_users"
                                 referencedTableName="Users"/>
 
        <addForeignKeyConstraint baseColumnNames="Id_request"
                                 baseTableName="Responses"
                                 constraintName="FK_Responses_Requests"
                                 onDelete="SET NULL"
                                 onUpdate="RESTRICT"
                                 referencedColumnNames="Id_request"
                                 referencedTableName="Requests"/>
    </changeSet>
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2021, 12:11
Ответы с готовыми решениями:

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями...

QueryDSL и Spring Data JPA
Начал изучать querydsl. Делал по одному примеру. Там из такого запроса: ...

Spring JPA. Сохранение связанных OneToMany объектов
Всем доброго времени суток. В общем, у меня имеется вот такая структура объектов: @Entity...

Spring Data Jpa и LocalDate
Доброго времени суток. Стал интересен такой ньюанс jpa. Допустим у меня есть юзер с полем LocalDate...

4
Эксперт Java
3044 / 2541 / 782
Регистрация: 05.07.2013
Сообщений: 12,295
08.01.2021, 12:26 2
Цитата Сообщение от Vlad__i__mir Посмотреть сообщение
mappedBy reference an unknown target entity property: com.vs.authorizationService.entity.Response.Requests
переведи предложение то
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 461
08.01.2021, 12:38  [ТС] 3
Цитата Сообщение от xoraxax Посмотреть сообщение
переведи предложение то
Ну понятно, что он ругается на ссылку Requests в Response, эта ссылка отвечает у меня за связь Один ко многим, но ведь вроде нормально её прописал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Table(name="Responses")
public class Response {
 
    @ManyToOne
    @JoinColumn(name="Id_request", nullable=true)
    private Request request;
 
}
 
@Table(name="Requests")
public class Request {
 
    @OneToMany(mappedBy="Requests")
    private List<Response> responses;
 
}
0
Эксперт Java
3044 / 2541 / 782
Регистрация: 05.07.2013
Сообщений: 12,295
08.01.2021, 12:43 4
Лучший ответ Сообщение было отмечено Vlad__i__mir как решение

Решение

не, ты переведи. Ты же не понимаешь, что там написано.
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 461
08.01.2021, 13:02  [ТС] 5
Цитата Сообщение от xoraxax Посмотреть сообщение
не, ты переведи. Ты же не понимаешь, что там написано.
Ну вот дословный перевод гоогл:
mapped По ссылке на неизвестное свойство целевой сущности: com.vs.authorizationService.entity.Response.Requests
Я понял, в @OneToMany(mappedBy="request") нужно было указать имя поля, а не имя сущности.
Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2021, 13:02

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Ошибка в UserServiceTest (spring data jpa)
Использую spring data jpa. При написании теста для UserService возникает ошибка. Не пойму как...

Исключения при использовании Spring Data Jpa
Доброго времени суток. Пишу приложение с использование Spring Boot и Data Jpa. Столкнулся с одной...

Осуществить поиск объекта со Spring data jpa
Есть такой объект public class DepositMatrix implements Serializable, Cloneable { public...

Как настроить Spring Data JPA Repository?
Приветствую уважаемые форумчане. Использую Spring MVC без Spring Boot. Пытаюсь настроить...

Could not initialize proxy - no Session Spring data jpa + Hibernate
Проблема возникает тут: Category category = categoryService.getById(id); if(category!=null) {...

Spring DaTa Jpa @ManyToMany: инициализация списка сущностей
Приветствую! Есть две таблицы: students age grade name id(PK) courses


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.