Dynamically Query from List or two different entities
I have an entity called Person, inside that basic metadata, then inside that Tag and Language. I want to get all rows that contain specific tag name and language.
I came to know about Criteria Query about. How can we interlink two different entities together?
Example: Get all rows having the tag as Model and language as English.
@Entity
public Person {
@Id
private String id;
private BasicMetadata basicMetadata;
-----------
}
Basic Metadata table
@Entity
public BasicMetadata {
@Id
private String id;
private List<Tag> tags;
private List<Language> language;
-------------
}
Tag Table
@Entity
public Tag {
@Id
private String id;
private String name;
-------------
}
Language Table
@Entity
public Language{
@Id
private String id;
private String name;
-------------
}
I created a simple method for specification Query is that correct
private Specification<Person> containsText(String keyword) {
return (root,query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Predicate genreExp = builder.like(builder.lower(root.get("basicMetadata").get("tags")), finalText);
return builder.or(genreExp);
};
java spring-boot jpa hibernate-criteria criteria-api
add a comment |
I have an entity called Person, inside that basic metadata, then inside that Tag and Language. I want to get all rows that contain specific tag name and language.
I came to know about Criteria Query about. How can we interlink two different entities together?
Example: Get all rows having the tag as Model and language as English.
@Entity
public Person {
@Id
private String id;
private BasicMetadata basicMetadata;
-----------
}
Basic Metadata table
@Entity
public BasicMetadata {
@Id
private String id;
private List<Tag> tags;
private List<Language> language;
-------------
}
Tag Table
@Entity
public Tag {
@Id
private String id;
private String name;
-------------
}
Language Table
@Entity
public Language{
@Id
private String id;
private String name;
-------------
}
I created a simple method for specification Query is that correct
private Specification<Person> containsText(String keyword) {
return (root,query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Predicate genreExp = builder.like(builder.lower(root.get("basicMetadata").get("tags")), finalText);
return builder.or(genreExp);
};
java spring-boot jpa hibernate-criteria criteria-api
add a comment |
I have an entity called Person, inside that basic metadata, then inside that Tag and Language. I want to get all rows that contain specific tag name and language.
I came to know about Criteria Query about. How can we interlink two different entities together?
Example: Get all rows having the tag as Model and language as English.
@Entity
public Person {
@Id
private String id;
private BasicMetadata basicMetadata;
-----------
}
Basic Metadata table
@Entity
public BasicMetadata {
@Id
private String id;
private List<Tag> tags;
private List<Language> language;
-------------
}
Tag Table
@Entity
public Tag {
@Id
private String id;
private String name;
-------------
}
Language Table
@Entity
public Language{
@Id
private String id;
private String name;
-------------
}
I created a simple method for specification Query is that correct
private Specification<Person> containsText(String keyword) {
return (root,query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Predicate genreExp = builder.like(builder.lower(root.get("basicMetadata").get("tags")), finalText);
return builder.or(genreExp);
};
java spring-boot jpa hibernate-criteria criteria-api
I have an entity called Person, inside that basic metadata, then inside that Tag and Language. I want to get all rows that contain specific tag name and language.
I came to know about Criteria Query about. How can we interlink two different entities together?
Example: Get all rows having the tag as Model and language as English.
@Entity
public Person {
@Id
private String id;
private BasicMetadata basicMetadata;
-----------
}
Basic Metadata table
@Entity
public BasicMetadata {
@Id
private String id;
private List<Tag> tags;
private List<Language> language;
-------------
}
Tag Table
@Entity
public Tag {
@Id
private String id;
private String name;
-------------
}
Language Table
@Entity
public Language{
@Id
private String id;
private String name;
-------------
}
I created a simple method for specification Query is that correct
private Specification<Person> containsText(String keyword) {
return (root,query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Predicate genreExp = builder.like(builder.lower(root.get("basicMetadata").get("tags")), finalText);
return builder.or(genreExp);
};
java spring-boot jpa hibernate-criteria criteria-api
java spring-boot jpa hibernate-criteria criteria-api
edited Jan 2 at 14:05
Nandakumar Kadavannoore
asked Jan 2 at 13:55


Nandakumar KadavannooreNandakumar Kadavannoore
249
249
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
you can write your specification like this
public class PersonSpecifications {
public static Specification<Person> hasTag(String keyword) {
return (root, query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Join<Person, BasicMetaData> md = root.join("basicMetaData");
return builder.like(builder.lower(md.join("tags").get("name")), finalText);
}
}
}
and you can use this specification to get the filtered results like this
repository.findAll(PersonSpecifications. hasTag("abc"),PageRequest,of(0,10));
But while using Person repository asPage<Person> findAll(Specification<Person> containsText, Pageable pageRequest);
. After running the application error occured asCaused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Person!
– Nandakumar Kadavannoore
Jan 3 at 11:05
is your repository extending JpaSpecificationExecutor?
– Reza Nasiri
Jan 3 at 12:40
Yes extending bothPagingAndSortingRepository<Person, String>
andJpaSpecificationExecutor<Person>
– Nandakumar Kadavannoore
Jan 4 at 7:04
that doesn't seem right. can you share your repository code as well as the code that causing the exception?
– Reza Nasiri
Jan 4 at 14:32
public interface PersonRepository extends CrudRepository<Person, String>, JpaSpecificationExecutor<Person> { Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest); Page<Person> findAll(Pageable pageable); }
– Nandakumar Kadavannoore
Jan 7 at 6:42
|
show 2 more comments
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54007603%2fdynamically-query-from-list-or-two-different-entities%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
you can write your specification like this
public class PersonSpecifications {
public static Specification<Person> hasTag(String keyword) {
return (root, query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Join<Person, BasicMetaData> md = root.join("basicMetaData");
return builder.like(builder.lower(md.join("tags").get("name")), finalText);
}
}
}
and you can use this specification to get the filtered results like this
repository.findAll(PersonSpecifications. hasTag("abc"),PageRequest,of(0,10));
But while using Person repository asPage<Person> findAll(Specification<Person> containsText, Pageable pageRequest);
. After running the application error occured asCaused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Person!
– Nandakumar Kadavannoore
Jan 3 at 11:05
is your repository extending JpaSpecificationExecutor?
– Reza Nasiri
Jan 3 at 12:40
Yes extending bothPagingAndSortingRepository<Person, String>
andJpaSpecificationExecutor<Person>
– Nandakumar Kadavannoore
Jan 4 at 7:04
that doesn't seem right. can you share your repository code as well as the code that causing the exception?
– Reza Nasiri
Jan 4 at 14:32
public interface PersonRepository extends CrudRepository<Person, String>, JpaSpecificationExecutor<Person> { Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest); Page<Person> findAll(Pageable pageable); }
– Nandakumar Kadavannoore
Jan 7 at 6:42
|
show 2 more comments
you can write your specification like this
public class PersonSpecifications {
public static Specification<Person> hasTag(String keyword) {
return (root, query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Join<Person, BasicMetaData> md = root.join("basicMetaData");
return builder.like(builder.lower(md.join("tags").get("name")), finalText);
}
}
}
and you can use this specification to get the filtered results like this
repository.findAll(PersonSpecifications. hasTag("abc"),PageRequest,of(0,10));
But while using Person repository asPage<Person> findAll(Specification<Person> containsText, Pageable pageRequest);
. After running the application error occured asCaused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Person!
– Nandakumar Kadavannoore
Jan 3 at 11:05
is your repository extending JpaSpecificationExecutor?
– Reza Nasiri
Jan 3 at 12:40
Yes extending bothPagingAndSortingRepository<Person, String>
andJpaSpecificationExecutor<Person>
– Nandakumar Kadavannoore
Jan 4 at 7:04
that doesn't seem right. can you share your repository code as well as the code that causing the exception?
– Reza Nasiri
Jan 4 at 14:32
public interface PersonRepository extends CrudRepository<Person, String>, JpaSpecificationExecutor<Person> { Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest); Page<Person> findAll(Pageable pageable); }
– Nandakumar Kadavannoore
Jan 7 at 6:42
|
show 2 more comments
you can write your specification like this
public class PersonSpecifications {
public static Specification<Person> hasTag(String keyword) {
return (root, query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Join<Person, BasicMetaData> md = root.join("basicMetaData");
return builder.like(builder.lower(md.join("tags").get("name")), finalText);
}
}
}
and you can use this specification to get the filtered results like this
repository.findAll(PersonSpecifications. hasTag("abc"),PageRequest,of(0,10));
you can write your specification like this
public class PersonSpecifications {
public static Specification<Person> hasTag(String keyword) {
return (root, query, builder) -> {
String finalText = keyword.toLowerCase();
if (!finalText.contains("%")) {
finalText = "%" + finalText + "%";
}
Join<Person, BasicMetaData> md = root.join("basicMetaData");
return builder.like(builder.lower(md.join("tags").get("name")), finalText);
}
}
}
and you can use this specification to get the filtered results like this
repository.findAll(PersonSpecifications. hasTag("abc"),PageRequest,of(0,10));
edited Jan 7 at 12:53
answered Jan 2 at 14:36


Reza NasiriReza Nasiri
6211116
6211116
But while using Person repository asPage<Person> findAll(Specification<Person> containsText, Pageable pageRequest);
. After running the application error occured asCaused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Person!
– Nandakumar Kadavannoore
Jan 3 at 11:05
is your repository extending JpaSpecificationExecutor?
– Reza Nasiri
Jan 3 at 12:40
Yes extending bothPagingAndSortingRepository<Person, String>
andJpaSpecificationExecutor<Person>
– Nandakumar Kadavannoore
Jan 4 at 7:04
that doesn't seem right. can you share your repository code as well as the code that causing the exception?
– Reza Nasiri
Jan 4 at 14:32
public interface PersonRepository extends CrudRepository<Person, String>, JpaSpecificationExecutor<Person> { Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest); Page<Person> findAll(Pageable pageable); }
– Nandakumar Kadavannoore
Jan 7 at 6:42
|
show 2 more comments
But while using Person repository asPage<Person> findAll(Specification<Person> containsText, Pageable pageRequest);
. After running the application error occured asCaused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Person!
– Nandakumar Kadavannoore
Jan 3 at 11:05
is your repository extending JpaSpecificationExecutor?
– Reza Nasiri
Jan 3 at 12:40
Yes extending bothPagingAndSortingRepository<Person, String>
andJpaSpecificationExecutor<Person>
– Nandakumar Kadavannoore
Jan 4 at 7:04
that doesn't seem right. can you share your repository code as well as the code that causing the exception?
– Reza Nasiri
Jan 4 at 14:32
public interface PersonRepository extends CrudRepository<Person, String>, JpaSpecificationExecutor<Person> { Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest); Page<Person> findAll(Pageable pageable); }
– Nandakumar Kadavannoore
Jan 7 at 6:42
But while using Person repository as
Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest);
. After running the application error occured as Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Person!
– Nandakumar Kadavannoore
Jan 3 at 11:05
But while using Person repository as
Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest);
. After running the application error occured as Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type Person!
– Nandakumar Kadavannoore
Jan 3 at 11:05
is your repository extending JpaSpecificationExecutor?
– Reza Nasiri
Jan 3 at 12:40
is your repository extending JpaSpecificationExecutor?
– Reza Nasiri
Jan 3 at 12:40
Yes extending both
PagingAndSortingRepository<Person, String>
andJpaSpecificationExecutor<Person>
– Nandakumar Kadavannoore
Jan 4 at 7:04
Yes extending both
PagingAndSortingRepository<Person, String>
andJpaSpecificationExecutor<Person>
– Nandakumar Kadavannoore
Jan 4 at 7:04
that doesn't seem right. can you share your repository code as well as the code that causing the exception?
– Reza Nasiri
Jan 4 at 14:32
that doesn't seem right. can you share your repository code as well as the code that causing the exception?
– Reza Nasiri
Jan 4 at 14:32
public interface PersonRepository extends CrudRepository<Person, String>, JpaSpecificationExecutor<Person> { Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest); Page<Person> findAll(Pageable pageable); }
– Nandakumar Kadavannoore
Jan 7 at 6:42
public interface PersonRepository extends CrudRepository<Person, String>, JpaSpecificationExecutor<Person> { Page<Person> findAll(Specification<Person> containsText, Pageable pageRequest); Page<Person> findAll(Pageable pageable); }
– Nandakumar Kadavannoore
Jan 7 at 6:42
|
show 2 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54007603%2fdynamically-query-from-list-or-two-different-entities%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown