spring boot data @query to DTO
I want to assign the result of a query to DTO object. The DTO looks this
@Getter
@Setter
@NoArgsConstructor
public class Metric {
private int share;
private int shareholder;
public Metric(int share, int shareholder) {
this.share = share;
this.shareholder = shareholder;
}
}
and the looks as following
@RepositoryRestResource(collectionResourceRel = "shareholders", path =
"shareholders")
public interface ShareholderRepository extends
PagingAndSortingRepository<Shareholder, Integer> {
@Query(value = "SELECT new
com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true")
Metric getMetrics();
}
However, this is not working as I get the following exception:
Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
spring-boot spring-data-jpa dto
add a comment |
I want to assign the result of a query to DTO object. The DTO looks this
@Getter
@Setter
@NoArgsConstructor
public class Metric {
private int share;
private int shareholder;
public Metric(int share, int shareholder) {
this.share = share;
this.shareholder = shareholder;
}
}
and the looks as following
@RepositoryRestResource(collectionResourceRel = "shareholders", path =
"shareholders")
public interface ShareholderRepository extends
PagingAndSortingRepository<Shareholder, Integer> {
@Query(value = "SELECT new
com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true")
Metric getMetrics();
}
However, this is not working as I get the following exception:
Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
spring-boot spring-data-jpa dto
1
whats the exception?
– Maciej Kowalski
Nov 15 '18 at 15:07
@MaciejKowalski This's is the exception raised.Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
– btinsae
Nov 15 '18 at 16:16
It seems your query is a native query (!= JPQL or HQL). In that case, specify it in the annotation like :@Query(value = "sql string ", nativeQuery = true)
– Guillaume Husta
Nov 16 '18 at 8:54
add a comment |
I want to assign the result of a query to DTO object. The DTO looks this
@Getter
@Setter
@NoArgsConstructor
public class Metric {
private int share;
private int shareholder;
public Metric(int share, int shareholder) {
this.share = share;
this.shareholder = shareholder;
}
}
and the looks as following
@RepositoryRestResource(collectionResourceRel = "shareholders", path =
"shareholders")
public interface ShareholderRepository extends
PagingAndSortingRepository<Shareholder, Integer> {
@Query(value = "SELECT new
com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true")
Metric getMetrics();
}
However, this is not working as I get the following exception:
Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
spring-boot spring-data-jpa dto
I want to assign the result of a query to DTO object. The DTO looks this
@Getter
@Setter
@NoArgsConstructor
public class Metric {
private int share;
private int shareholder;
public Metric(int share, int shareholder) {
this.share = share;
this.shareholder = shareholder;
}
}
and the looks as following
@RepositoryRestResource(collectionResourceRel = "shareholders", path =
"shareholders")
public interface ShareholderRepository extends
PagingAndSortingRepository<Shareholder, Integer> {
@Query(value = "SELECT new
com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true")
Metric getMetrics();
}
However, this is not working as I get the following exception:
Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
spring-boot spring-data-jpa dto
spring-boot spring-data-jpa dto
edited Nov 26 '18 at 12:39
g00glen00b
23.2k85279
23.2k85279
asked Nov 15 '18 at 14:58
btinsaebtinsae
215
215
1
whats the exception?
– Maciej Kowalski
Nov 15 '18 at 15:07
@MaciejKowalski This's is the exception raised.Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
– btinsae
Nov 15 '18 at 16:16
It seems your query is a native query (!= JPQL or HQL). In that case, specify it in the annotation like :@Query(value = "sql string ", nativeQuery = true)
– Guillaume Husta
Nov 16 '18 at 8:54
add a comment |
1
whats the exception?
– Maciej Kowalski
Nov 15 '18 at 15:07
@MaciejKowalski This's is the exception raised.Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
– btinsae
Nov 15 '18 at 16:16
It seems your query is a native query (!= JPQL or HQL). In that case, specify it in the annotation like :@Query(value = "sql string ", nativeQuery = true)
– Guillaume Husta
Nov 16 '18 at 8:54
1
1
whats the exception?
– Maciej Kowalski
Nov 15 '18 at 15:07
whats the exception?
– Maciej Kowalski
Nov 15 '18 at 15:07
@MaciejKowalski This's is the exception raised.
Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
– btinsae
Nov 15 '18 at 16:16
@MaciejKowalski This's is the exception raised.
Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
– btinsae
Nov 15 '18 at 16:16
It seems your query is a native query (!= JPQL or HQL). In that case, specify it in the annotation like :
@Query(value = "sql string ", nativeQuery = true)
– Guillaume Husta
Nov 16 '18 at 8:54
It seems your query is a native query (!= JPQL or HQL). In that case, specify it in the annotation like :
@Query(value = "sql string ", nativeQuery = true)
– Guillaume Husta
Nov 16 '18 at 8:54
add a comment |
1 Answer
1
active
oldest
votes
First, you can have a look at the Spring Data JPA documentation, you can find some help at this section : Class-based Projections (DTOs).
There is also a paragraph titled Avoid boilerplate code for projection DTOs, where they advise you to use Lombok's @Value
annotation, to produce an immutable DTO. This is similar to Lombok's @Data
annotation, but immutable.
If you apply it to your example, the source will look like :
@Value
public class MetricDto {
private int share;
private int shareholder;
}
Then, as your query is a NativeQuery, specifiy it in your Spring Data Repository.
You can find help in the documentation : Native Queries.
You will need something like :
@Query(value = "SELECT new
com.company.shareholders.sh.MetricDto(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true", nativeQuery = true)
MetricDto getMetrics();
add a comment |
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%2f53322203%2fspring-boot-data-query-to-dto%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
First, you can have a look at the Spring Data JPA documentation, you can find some help at this section : Class-based Projections (DTOs).
There is also a paragraph titled Avoid boilerplate code for projection DTOs, where they advise you to use Lombok's @Value
annotation, to produce an immutable DTO. This is similar to Lombok's @Data
annotation, but immutable.
If you apply it to your example, the source will look like :
@Value
public class MetricDto {
private int share;
private int shareholder;
}
Then, as your query is a NativeQuery, specifiy it in your Spring Data Repository.
You can find help in the documentation : Native Queries.
You will need something like :
@Query(value = "SELECT new
com.company.shareholders.sh.MetricDto(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true", nativeQuery = true)
MetricDto getMetrics();
add a comment |
First, you can have a look at the Spring Data JPA documentation, you can find some help at this section : Class-based Projections (DTOs).
There is also a paragraph titled Avoid boilerplate code for projection DTOs, where they advise you to use Lombok's @Value
annotation, to produce an immutable DTO. This is similar to Lombok's @Data
annotation, but immutable.
If you apply it to your example, the source will look like :
@Value
public class MetricDto {
private int share;
private int shareholder;
}
Then, as your query is a NativeQuery, specifiy it in your Spring Data Repository.
You can find help in the documentation : Native Queries.
You will need something like :
@Query(value = "SELECT new
com.company.shareholders.sh.MetricDto(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true", nativeQuery = true)
MetricDto getMetrics();
add a comment |
First, you can have a look at the Spring Data JPA documentation, you can find some help at this section : Class-based Projections (DTOs).
There is also a paragraph titled Avoid boilerplate code for projection DTOs, where they advise you to use Lombok's @Value
annotation, to produce an immutable DTO. This is similar to Lombok's @Data
annotation, but immutable.
If you apply it to your example, the source will look like :
@Value
public class MetricDto {
private int share;
private int shareholder;
}
Then, as your query is a NativeQuery, specifiy it in your Spring Data Repository.
You can find help in the documentation : Native Queries.
You will need something like :
@Query(value = "SELECT new
com.company.shareholders.sh.MetricDto(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true", nativeQuery = true)
MetricDto getMetrics();
First, you can have a look at the Spring Data JPA documentation, you can find some help at this section : Class-based Projections (DTOs).
There is also a paragraph titled Avoid boilerplate code for projection DTOs, where they advise you to use Lombok's @Value
annotation, to produce an immutable DTO. This is similar to Lombok's @Data
annotation, but immutable.
If you apply it to your example, the source will look like :
@Value
public class MetricDto {
private int share;
private int shareholder;
}
Then, as your query is a NativeQuery, specifiy it in your Spring Data Repository.
You can find help in the documentation : Native Queries.
You will need something like :
@Query(value = "SELECT new
com.company.shareholders.sh.MetricDto(SUM(s.no_of_shares),COUNT(*)) FROM
shareholders s WHERE s.attend=true", nativeQuery = true)
MetricDto getMetrics();
answered Nov 16 '18 at 9:24
Guillaume HustaGuillaume Husta
1,9951630
1,9951630
add a comment |
add a comment |
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%2f53322203%2fspring-boot-data-query-to-dto%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
1
whats the exception?
– Maciej Kowalski
Nov 15 '18 at 15:07
@MaciejKowalski This's is the exception raised.
Caused by:org.hibernate.QueryException: could not resolve property: no_of_shares of:com.company.shareholders.sh.Shareholder[SELECT new com.company.shareholders.sh.Metric(SUM(s.no_of_shares),COUNT(*)) FROM com.company.shareholders.sh.Shareholder s WHERE s.attend=true]
– btinsae
Nov 15 '18 at 16:16
It seems your query is a native query (!= JPQL or HQL). In that case, specify it in the annotation like :
@Query(value = "sql string ", nativeQuery = true)
– Guillaume Husta
Nov 16 '18 at 8:54