[
https://issues.apache.org/jira/browse/OLINGO-1467?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mahdi Ansari updated OLINGO-1467:
---------------------------------
Description:
I have made an OData server with Spring-boot, JPA, Hibernate and Olingo2.
There is a *{{ManyToMany}}* relationship between {{User}} and {{Role}} entities.
{code:java}
// In User entity
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,
CascadeType.MERGE})
@JoinTable(name = "user_authority",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName =
"user_id")}, inverseJoinColumns = {@JoinColumn(name = "role_id",
referencedColumnName = "role_id")})
private Set<Role> roles = new HashSet<>();{code}
and
{code:java}
// In Role entity
//bi-directional many-to-many association to User
@ManyToMany(mappedBy="roles", fetch = FetchType.LAZY)
@JsonIgnore
private Set<User> users = new HashSet<>();{code}
I am using Olingo {{V2.0.11}} and spring boot version {{2.3.0.RELEASE}}.
When I try to see the list of Roles in my odata endpoint I can easily do it,
however when I try to see list of Users like:
{code:java}
http://localhost:9090/odata.svc/UserSet{code}
Then I get the following error:
{code:java}
<?xml version='1.0' encoding='UTF-8'?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code/>
<message xml:lang="en">Missing message for key
'org.apache.olingo.odata2.api.edm.EdmSimpleTypeException.PROPERTY_VALUE_FACETS_NOT_MATCHED'!</message>
</error>{code}
The interesting point is if I only retrieve one User like:
{code:java}
http://localhost:9090/odata.svc/UserSet(1)?$format=json&$expand=Roles {code}
Then I can see the result, even as you saw I could expand the Roles
relationship:
{code:java}
{ "d": { "__metadata": { "id":
"http://localhost:9090/odata.svc/UserSet(1L)", "uri":
"http://localhost:9090/odata.svc/UserSet(1L)", "type":
"me.cimply.User" }, "active": true, "createdAt":
"/Date(1594283306126)/", "email": "[email protected]",
"emailVerified": true, "firstName": "Guest", "id": "1",
"lastName": " ", "photoContent": null, "updatedAt":
"/Date(1594283306126)/", "username": "[email protected]",
"Answers": { "__deferred": { "uri":
"http://localhost:9090/odata.svc/UserSet(1L)/Answers" } },
"Roles": { "results": [ {
"__metadata": { "id":
"http://localhost:9090/odata.svc/Roles(2L)", "uri":
"http://localhost:9090/odata.svc/Roles(2L)", "type":
"me.cimply.Role" }, "id": "2",
"role": "ROLE_ADMIN", "users": {
"__deferred": { "uri":
"http://localhost:9090/odata.svc/Roles(2L)/users" }
} }, {
"__metadata": { "id":
"http://localhost:9090/odata.svc/Roles(1L)", "uri":
"http://localhost:9090/odata.svc/Roles(1L)", "type":
"me.cimply.Role" }, "id": "1",
"role": "ROLE_USER", "users": {
"__deferred": { "uri":
"http://localhost:9090/odata.svc/Roles(1L)/users" }
} } ] }, "Surveys":
{ "__deferred": { "uri":
"http://localhost:9090/odata.svc/UserSet(1L)/Surveys" } }
} }{code}
I am not sure the error comes from JPA or from Olingo. Anyone else has similar
experiences with Olingo V2 for defining ManyToMany relationship?
was:
I have made an OData server with Spring-boot, JPA, Hibernate and Olingo2.
There is a *{{ManyToMany}}* relationship between {{User}} and {{Role}} entities.
{code:java}
// In User entity
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,
CascadeType.MERGE})
@JoinTable(name = "user_authority",
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName =
"user_id")}, inverseJoinColumns = {@JoinColumn(name = "role_id",
referencedColumnName = "role_id")})
private Set<Role> roles = new HashSet<>();{code}
and
{code:java}
// In Role entity
//bi-directional many-to-many association to User
@ManyToMany(mappedBy="roles", fetch = FetchType.LAZY)
@JsonIgnore
private Set<User> users = new HashSet<>();{code}
I am using Olingo {{V2.0.11}} and spring boot version {{2.3.0.RELEASE}}.
When I try to see the list of Roles in my odata endpoint I can easily do it,
however when I try to see list of Users like:
{code:java}
http://localhost:9090/odata.svc/UserSet{code}
Then I get the following error:
{code:java}
<?xml version='1.0' encoding='UTF-8'?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code/>
<message xml:lang="en">Missing message for key
'org.apache.olingo.odata2.api.edm.EdmSimpleTypeException.PROPERTY_VALUE_FACETS_NOT_MATCHED'!</message>
</error>{code}
The interesting point is if I only retrieve one User like:
{code:java}
http://localhost:9090/odata.svc/UserSet(1)?$format=json&$expand=Roles {code}
Then I can see the result, even as you saw I could expand the Roles
relationship:
I am not sure the error comes from JPA or from Olingo. Anyone else has similar
experiences with Olingo V2 for defining ManyToMany relationship?
> Olingo V2 makes exception on entities with ManyToMany relationships
> -------------------------------------------------------------------
>
> Key: OLINGO-1467
> URL: https://issues.apache.org/jira/browse/OLINGO-1467
> Project: Olingo
> Issue Type: Bug
> Components: odata2-jpa
> Affects Versions: V2 2.0.11
> Environment: Spring-boot, Hibernate
> Reporter: Mahdi Ansari
> Priority: Major
>
> I have made an OData server with Spring-boot, JPA, Hibernate and Olingo2.
> There is a *{{ManyToMany}}* relationship between {{User}} and {{Role}}
> entities.
> {code:java}
> // In User entity
> @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,
> CascadeType.MERGE})
> @JoinTable(name = "user_authority",
> joinColumns = {@JoinColumn(name = "user_id", referencedColumnName =
> "user_id")}, inverseJoinColumns = {@JoinColumn(name = "role_id",
> referencedColumnName = "role_id")})
> private Set<Role> roles = new HashSet<>();{code}
> and
> {code:java}
> // In Role entity
> //bi-directional many-to-many association to User
> @ManyToMany(mappedBy="roles", fetch = FetchType.LAZY)
> @JsonIgnore
> private Set<User> users = new HashSet<>();{code}
> I am using Olingo {{V2.0.11}} and spring boot version {{2.3.0.RELEASE}}.
> When I try to see the list of Roles in my odata endpoint I can easily do it,
> however when I try to see list of Users like:
> {code:java}
> http://localhost:9090/odata.svc/UserSet{code}
> Then I get the following error:
> {code:java}
> <?xml version='1.0' encoding='UTF-8'?>
> <error
> xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
> <code/>
> <message xml:lang="en">Missing message for key
> 'org.apache.olingo.odata2.api.edm.EdmSimpleTypeException.PROPERTY_VALUE_FACETS_NOT_MATCHED'!</message>
>
> </error>{code}
> The interesting point is if I only retrieve one User like:
> {code:java}
> http://localhost:9090/odata.svc/UserSet(1)?$format=json&$expand=Roles {code}
> Then I can see the result, even as you saw I could expand the Roles
> relationship:
>
>
> {code:java}
> { "d": { "__metadata": { "id":
> "http://localhost:9090/odata.svc/UserSet(1L)", "uri":
> "http://localhost:9090/odata.svc/UserSet(1L)", "type":
> "me.cimply.User" }, "active": true, "createdAt":
> "/Date(1594283306126)/", "email": "[email protected]",
> "emailVerified": true, "firstName": "Guest", "id": "1",
> "lastName": " ", "photoContent": null, "updatedAt":
> "/Date(1594283306126)/", "username": "[email protected]",
> "Answers": { "__deferred": { "uri":
> "http://localhost:9090/odata.svc/UserSet(1L)/Answers" }
> }, "Roles": { "results": [ {
> "__metadata": { "id":
> "http://localhost:9090/odata.svc/Roles(2L)", "uri":
> "http://localhost:9090/odata.svc/Roles(2L)", "type":
> "me.cimply.Role" }, "id": "2",
> "role": "ROLE_ADMIN", "users": {
> "__deferred": { "uri":
> "http://localhost:9090/odata.svc/Roles(2L)/users" }
> } }, {
> "__metadata": { "id":
> "http://localhost:9090/odata.svc/Roles(1L)", "uri":
> "http://localhost:9090/odata.svc/Roles(1L)", "type":
> "me.cimply.Role" }, "id": "1",
> "role": "ROLE_USER", "users": {
> "__deferred": { "uri":
> "http://localhost:9090/odata.svc/Roles(1L)/users" }
> } } ] },
> "Surveys": { "__deferred": { "uri":
> "http://localhost:9090/odata.svc/UserSet(1L)/Surveys" } }
> } }{code}
>
>
>
> I am not sure the error comes from JPA or from Olingo. Anyone else has
> similar experiences with Olingo V2 for defining ManyToMany relationship?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)