Skip to content

Commit 8c595b2

Browse files
committed
Improved start implementations of services.
- use TypedQuery instead of plain Query - use JPA spec compatible query notation
1 parent 27bd3aa commit 8c595b2

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

spring-data-jpa-showcase/src/main/java/org/springframework/data/jpa/showcase/before/AccountServiceImpl.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
import javax.persistence.EntityManager;
66
import javax.persistence.PersistenceContext;
7-
import javax.persistence.Query;
7+
import javax.persistence.TypedQuery;
88

99
import org.springframework.data.jpa.showcase.core.Account;
1010
import org.springframework.data.jpa.showcase.core.Customer;
1111
import org.springframework.stereotype.Repository;
12+
import org.springframework.transaction.annotation.Transactional;
1213

1314

1415
/**
@@ -17,6 +18,7 @@
1718
* @author Oliver Gierke
1819
*/
1920
@Repository
21+
@Transactional(readOnly = true)
2022
class AccountServiceImpl implements AccountService {
2123

2224
@PersistenceContext
@@ -27,10 +29,11 @@ class AccountServiceImpl implements AccountService {
2729
* (non-Javadoc)
2830
*
2931
* @see
30-
* org.geecon.hades.before.AccountRepository#save(org.geecon.hades.before
31-
* .Account)
32+
* org.springframework.data.jpa.showcase.before.AccountService#save(org.
33+
* springframework.data.jpa.showcase.core.Account)
3234
*/
3335
@Override
36+
@Transactional
3437
public Account save(Account account) {
3538

3639
if (account.getId() == null) {
@@ -46,14 +49,15 @@ public Account save(Account account) {
4649
* (non-Javadoc)
4750
*
4851
* @see
49-
* org.geecon.hades.before.AccountRepository#findByCustomer(org.geecon.hades
50-
* .before.Customer)
52+
* org.springframework.data.jpa.showcase.before.AccountService#findByCustomer
53+
* (org.springframework.data.jpa.showcase.core.Customer)
5154
*/
5255
@Override
53-
@SuppressWarnings("unchecked")
5456
public List<Account> findByCustomer(Customer customer) {
5557

56-
Query query = em.createQuery("from Account a where a.customer = ?");
58+
TypedQuery<Account> query =
59+
em.createQuery("select a from Account a where a.customer = ?1",
60+
Account.class);
5761
query.setParameter(1, customer);
5862

5963
return query.getResultList();

spring-data-jpa-showcase/src/main/java/org/springframework/data/jpa/showcase/before/CustomerServiceImpl.java

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
import javax.persistence.EntityManager;
66
import javax.persistence.PersistenceContext;
7-
import javax.persistence.Query;
7+
import javax.persistence.TypedQuery;
88

99
import org.springframework.data.jpa.showcase.core.Customer;
1010
import org.springframework.stereotype.Repository;
11+
import org.springframework.transaction.annotation.Transactional;
1112

1213

1314
/**
@@ -16,6 +17,7 @@
1617
* @author Oliver Gierke
1718
*/
1819
@Repository
20+
@Transactional(readOnly = true)
1921
public class CustomerServiceImpl implements CustomerService {
2022

2123
@PersistenceContext
@@ -25,7 +27,9 @@ public class CustomerServiceImpl implements CustomerService {
2527
/*
2628
* (non-Javadoc)
2729
*
28-
* @see org.geecon.hades.before.CustomerRepository#findById(java.lang.Long)
30+
* @see
31+
* org.springframework.data.jpa.showcase.before.CustomerService#findById
32+
* (java.lang.Long)
2933
*/
3034
@Override
3135
public Customer findById(Long id) {
@@ -37,26 +41,29 @@ public Customer findById(Long id) {
3741
/*
3842
* (non-Javadoc)
3943
*
40-
* @see org.geecon.hades.before.CustomerRepository#findAll()
44+
* @see
45+
* org.springframework.data.jpa.showcase.before.CustomerService#findAll()
4146
*/
4247
@Override
43-
@SuppressWarnings("unchecked")
4448
public List<Customer> findAll() {
4549

46-
return em.createQuery("from Customer c").getResultList();
50+
return em.createQuery("select c from Customer c", Customer.class)
51+
.getResultList();
4752
}
4853

4954

5055
/*
5156
* (non-Javadoc)
5257
*
53-
* @see org.geecon.hades.before.CustomerRepository#findAll(int, int)
58+
* @see
59+
* org.springframework.data.jpa.showcase.before.CustomerService#findAll(int,
60+
* int)
5461
*/
5562
@Override
56-
@SuppressWarnings("unchecked")
5763
public List<Customer> findAll(int page, int pageSize) {
5864

59-
Query query = em.createQuery("from Customer c");
65+
TypedQuery<Customer> query =
66+
em.createQuery("select c from Customer c", Customer.class);
6067

6168
query.setFirstResult(page * pageSize);
6269
query.setMaxResults(pageSize);
@@ -69,10 +76,11 @@ public List<Customer> findAll(int page, int pageSize) {
6976
* (non-Javadoc)
7077
*
7178
* @see
72-
* org.geecon.hades.before.CustomerRepository#save(org.geecon.hades.before
73-
* .Customer)
79+
* org.springframework.data.jpa.showcase.before.CustomerService#save(org
80+
* .springframework.data.jpa.showcase.core.Customer)
7481
*/
7582
@Override
83+
@Transactional
7684
public Customer save(Customer customer) {
7785

7886
// Is new?
@@ -89,14 +97,16 @@ public Customer save(Customer customer) {
8997
* (non-Javadoc)
9098
*
9199
* @see
92-
* org.geecon.hades.before.CustomerRepository#findByLastname(java.lang.String
93-
* , int, int)
100+
* org.springframework.data.jpa.showcase.before.CustomerService#findByLastname
101+
* (java.lang.String, int, int)
94102
*/
95103
@Override
96-
@SuppressWarnings("unchecked")
97104
public List<Customer> findByLastname(String lastname, int page, int pageSize) {
98105

99-
Query query = em.createQuery("from Customer c where c.lastname = ?");
106+
TypedQuery<Customer> query =
107+
em.createQuery(
108+
"select c from Customer c where c.lastname = ?1",
109+
Customer.class);
100110

101111
query.setParameter(1, lastname);
102112
query.setFirstResult(page * pageSize);

0 commit comments

Comments
 (0)