Skip to content

Commit 2cf9259

Browse files
committed
1. EbeanRepository entity do not need extends Persistable
2. Upgrade ebean to 11.21.1 3. Upgrade spring to 5.1.2 4. Upgrade spring data to 2.1.2.RELEASE 5. Add EbeanEntityInformation
1 parent 827079b commit 2cf9259

14 files changed

+93
-37
lines changed

pom.xml

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>io.github.hexagonframework.data</groupId>
88
<artifactId>spring-data-ebean</artifactId>
9-
<version>1.4.1.RELEASE</version>
9+
<version>2.0.0.RELEASE</version>
1010
<packaging>jar</packaging>
1111

1212
<name>Spring Data Ebean</name>
@@ -45,9 +45,9 @@
4545
<ebean-maven-plugin.args>debug=0</ebean-maven-plugin.args>
4646
<bundlor.enabled>false</bundlor.enabled>
4747
<bundlor.failOnWarnings>false</bundlor.failOnWarnings>
48-
<spring>5.0.4.RELEASE</spring>
49-
<springdata.commons>2.0.5.RELEASE</springdata.commons>
50-
<ebean.version>11.15.5</ebean.version>
48+
<spring>5.1.2.RELEASE</spring>
49+
<springdata.commons>2.1.2.RELEASE</springdata.commons>
50+
<ebean.version>11.21.1</ebean.version>
5151
<ebean-spring-txn.version>11.10.4</ebean-spring-txn.version>
5252
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
5353
</properties>
@@ -155,6 +155,7 @@
155155
<groupId>io.ebean</groupId>
156156
<artifactId>ebean</artifactId>
157157
<version>${ebean.version}</version>
158+
<optional>true</optional>
158159
</dependency>
159160

160161
<dependency>

src/main/java/org/springframework/data/ebean/repository/EbeanRepository.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919
import io.ebean.EbeanServer;
2020
import io.ebean.SqlUpdate;
2121
import io.ebean.UpdateQuery;
22-
import org.springframework.data.domain.*;
22+
import org.springframework.data.domain.Example;
23+
import org.springframework.data.domain.Page;
24+
import org.springframework.data.domain.Pageable;
25+
import org.springframework.data.domain.Sort;
2326
import org.springframework.data.repository.NoRepositoryBean;
2427
import org.springframework.data.repository.PagingAndSortingRepository;
2528
import org.springframework.data.repository.query.QueryByExampleExecutor;
2629

27-
import java.io.Serializable;
2830
import java.util.List;
2931
import java.util.Optional;
3032

@@ -34,7 +36,7 @@
3436
* @author Xuegui Yuan
3537
*/
3638
@NoRepositoryBean
37-
public interface EbeanRepository<T extends Persistable, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
39+
public interface EbeanRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
3840

3941
/**
4042
* Return the current EbeanServer.

src/main/java/org/springframework/data/ebean/repository/query/AbstractStringBasedEbeanQuery.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
abstract class AbstractStringBasedEbeanQuery extends AbstractEbeanQuery {
3131

3232
private final StringQuery query;
33-
private final EvaluationContextProvider evaluationContextProvider;
33+
private final QueryMethodEvaluationContextProvider evaluationContextProvider;
3434
private final SpelExpressionParser parser;
3535

3636
/**
@@ -44,7 +44,7 @@ abstract class AbstractStringBasedEbeanQuery extends AbstractEbeanQuery {
4444
* @param parser must not be {@literal null}.
4545
*/
4646
public AbstractStringBasedEbeanQuery(EbeanQueryMethod method, EbeanServer ebeanServer, String queryString,
47-
EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
47+
QueryMethodEvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
4848

4949
super(method, ebeanServer);
5050

src/main/java/org/springframework/data/ebean/repository/query/EbeanQueryFactory.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import io.ebean.Query;
2121
import org.slf4j.Logger;
2222
import org.slf4j.LoggerFactory;
23-
import org.springframework.data.repository.query.EvaluationContextProvider;
2423
import org.springframework.data.repository.query.QueryMethod;
24+
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
2525
import org.springframework.data.repository.query.RepositoryQuery;
2626
import org.springframework.expression.spel.standard.SpelExpressionParser;
2727

@@ -51,7 +51,7 @@ enum EbeanQueryFactory {
5151
* @return the {@link RepositoryQuery} derived from the annotation or {@code null} if no annotation found.
5252
*/
5353
AbstractEbeanQuery fromQueryAnnotation(EbeanQueryMethod method, EbeanServer ebeanServer,
54-
EvaluationContextProvider evaluationContextProvider) {
54+
QueryMethodEvaluationContextProvider evaluationContextProvider) {
5555

5656
LOG.debug("Looking up query for method {}", method.getName());
5757
return fromMethodWithQueryString(method, ebeanServer, method.getAnnotatedQuery(), evaluationContextProvider);
@@ -67,7 +67,7 @@ AbstractEbeanQuery fromQueryAnnotation(EbeanQueryMethod method, EbeanServer ebea
6767
* @return
6868
*/
6969
AbstractEbeanQuery fromMethodWithQueryString(EbeanQueryMethod method, EbeanServer ebeanServer, String queryString,
70-
EvaluationContextProvider evaluationContextProvider) {
70+
QueryMethodEvaluationContextProvider evaluationContextProvider) {
7171

7272
if (queryString == null) {
7373
return null;

src/main/java/org/springframework/data/ebean/repository/query/EbeanQueryLookupStrategy.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import org.springframework.data.projection.ProjectionFactory;
2222
import org.springframework.data.repository.core.NamedQueries;
2323
import org.springframework.data.repository.core.RepositoryMetadata;
24-
import org.springframework.data.repository.query.EvaluationContextProvider;
2524
import org.springframework.data.repository.query.QueryLookupStrategy;
2625
import org.springframework.data.repository.query.QueryLookupStrategy.Key;
26+
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
2727
import org.springframework.data.repository.query.RepositoryQuery;
2828
import org.springframework.util.Assert;
2929

@@ -51,7 +51,7 @@ private EbeanQueryLookupStrategy() {
5151
* @return
5252
*/
5353
public static QueryLookupStrategy create(EbeanServer ebeanServer, Key key,
54-
EvaluationContextProvider evaluationContextProvider) {
54+
QueryMethodEvaluationContextProvider evaluationContextProvider) {
5555

5656
Assert.notNull(ebeanServer, "EbeanServer must not be null!");
5757
Assert.notNull(evaluationContextProvider, "EvaluationContextProvider must not be null!");
@@ -181,7 +181,7 @@ protected RepositoryQuery resolveQuery(EbeanQueryMethod method, EbeanServer ebea
181181
*/
182182
private static class DeclaredQueryLookupStrategy extends AbstractQueryLookupStrategy {
183183

184-
private final EvaluationContextProvider evaluationContextProvider;
184+
private final QueryMethodEvaluationContextProvider evaluationContextProvider;
185185

186186
/**
187187
* Creates a new {@link DeclaredQueryLookupStrategy}.
@@ -190,7 +190,7 @@ private static class DeclaredQueryLookupStrategy extends AbstractQueryLookupStra
190190
* @param evaluationContextProvider
191191
*/
192192
public DeclaredQueryLookupStrategy(EbeanServer ebeanServer,
193-
EvaluationContextProvider evaluationContextProvider) {
193+
QueryMethodEvaluationContextProvider evaluationContextProvider) {
194194
super(ebeanServer);
195195
this.evaluationContextProvider = evaluationContextProvider;
196196
}

src/main/java/org/springframework/data/ebean/repository/query/NativeEbeanQuery.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ final class NativeEbeanQuery extends AbstractStringBasedEbeanQuery {
3939
* @param evaluationContextProvider
4040
*/
4141
public NativeEbeanQuery(EbeanQueryMethod method, EbeanServer ebeanServer, String queryString,
42-
EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
42+
QueryMethodEvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
4343

4444
super(method, ebeanServer, queryString, evaluationContextProvider, parser);
4545

src/main/java/org/springframework/data/ebean/repository/query/NativeEbeanUpdate.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
import io.ebean.EbeanServer;
2020
import org.springframework.data.ebean.annotation.Query;
21-
import org.springframework.data.repository.query.EvaluationContextProvider;
2221
import org.springframework.data.repository.query.Parameters;
2322
import org.springframework.data.repository.query.QueryMethod;
23+
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
2424
import org.springframework.data.repository.query.RepositoryQuery;
2525
import org.springframework.expression.spel.standard.SpelExpressionParser;
2626

@@ -42,7 +42,7 @@ final class NativeEbeanUpdate extends AbstractStringBasedEbeanQuery {
4242
* @param evaluationContextProvider
4343
*/
4444
public NativeEbeanUpdate(EbeanQueryMethod method, EbeanServer ebeanServer, String queryString,
45-
EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
45+
QueryMethodEvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
4646

4747
super(method, ebeanServer, queryString, evaluationContextProvider, parser);
4848

src/main/java/org/springframework/data/ebean/repository/query/OrmEbeanQuery.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import io.ebean.EbeanServer;
2020
import org.springframework.data.ebean.annotation.Query;
21-
import org.springframework.data.repository.query.EvaluationContextProvider;
21+
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
2222
import org.springframework.data.repository.query.RepositoryQuery;
2323
import org.springframework.expression.spel.standard.SpelExpressionParser;
2424

@@ -39,7 +39,7 @@ final class OrmEbeanQuery extends AbstractStringBasedEbeanQuery {
3939
* @param evaluationContextProvider must not be {@literal null}
4040
* @param parser must not be {@literal null}
4141
*/
42-
public OrmEbeanQuery(EbeanQueryMethod method, EbeanServer ebeanServer, EvaluationContextProvider evaluationContextProvider,
42+
public OrmEbeanQuery(EbeanQueryMethod method, EbeanServer ebeanServer, QueryMethodEvaluationContextProvider evaluationContextProvider,
4343
SpelExpressionParser parser) {
4444
this(method, ebeanServer, method.getAnnotatedQuery(), evaluationContextProvider, parser);
4545
}
@@ -54,7 +54,7 @@ public OrmEbeanQuery(EbeanQueryMethod method, EbeanServer ebeanServer, Evaluatio
5454
* @param parser must not be {@literal null}
5555
*/
5656
public OrmEbeanQuery(EbeanQueryMethod method, EbeanServer ebeanServer, String queryString,
57-
EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
57+
QueryMethodEvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
5858
super(method, ebeanServer, queryString, evaluationContextProvider, parser);
5959
}
6060
}

src/main/java/org/springframework/data/ebean/repository/query/OrmEbeanUpdate.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.springframework.data.ebean.repository.query;
1818

1919
import io.ebean.EbeanServer;
20-
import org.springframework.data.repository.query.EvaluationContextProvider;
20+
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
2121
import org.springframework.data.repository.query.RepositoryQuery;
2222
import org.springframework.expression.spel.standard.SpelExpressionParser;
2323

@@ -38,7 +38,7 @@ final class OrmEbeanUpdate extends AbstractStringBasedEbeanQuery {
3838
* @param evaluationContextProvider must not be {@literal null}
3939
* @param parser must not be {@literal null}
4040
*/
41-
public OrmEbeanUpdate(EbeanQueryMethod method, EbeanServer ebeanServer, EvaluationContextProvider evaluationContextProvider,
41+
public OrmEbeanUpdate(EbeanQueryMethod method, EbeanServer ebeanServer, QueryMethodEvaluationContextProvider evaluationContextProvider,
4242
SpelExpressionParser parser) {
4343
this(method, ebeanServer, method.getAnnotatedQuery(), evaluationContextProvider, parser);
4444
}
@@ -53,7 +53,7 @@ public OrmEbeanUpdate(EbeanQueryMethod method, EbeanServer ebeanServer, Evaluati
5353
* @param parser must not be {@literal null}
5454
*/
5555
public OrmEbeanUpdate(EbeanQueryMethod method, EbeanServer ebeanServer, String queryString,
56-
EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
56+
QueryMethodEvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
5757
super(method, ebeanServer, queryString, evaluationContextProvider, parser);
5858
}
5959

src/main/java/org/springframework/data/ebean/repository/query/SpelExpressionStringQueryParameterBinder.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
package org.springframework.data.ebean.repository.query;
1818

1919
import org.springframework.data.repository.query.DefaultParameters;
20-
import org.springframework.data.repository.query.EvaluationContextProvider;
2120
import org.springframework.data.repository.query.Parameter;
21+
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
2222
import org.springframework.expression.EvaluationContext;
2323
import org.springframework.expression.Expression;
2424
import org.springframework.expression.spel.standard.SpelExpressionParser;
@@ -35,7 +35,7 @@
3535
class SpelExpressionStringQueryParameterBinder extends StringQueryParameterBinder {
3636

3737
private final StringQuery query;
38-
private final EvaluationContextProvider evaluationContextProvider;
38+
private final QueryMethodEvaluationContextProvider evaluationContextProvider;
3939
private final SpelExpressionParser parser;
4040

4141
/**
@@ -48,7 +48,7 @@ class SpelExpressionStringQueryParameterBinder extends StringQueryParameterBinde
4848
* @param parser must not be {@literal null}
4949
*/
5050
public SpelExpressionStringQueryParameterBinder(DefaultParameters parameters, Object[] values, StringQuery query,
51-
EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
51+
QueryMethodEvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
5252

5353
super(parameters, values, query);
5454
Assert.notNull(evaluationContextProvider, "EvaluationContextProvider must not be null!");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.springframework.data.ebean.repository.support;
2+
3+
import io.ebean.EbeanServer;
4+
import lombok.NonNull;
5+
import org.springframework.core.ResolvableType;
6+
import org.springframework.data.repository.core.EntityInformation;
7+
8+
/**
9+
* Extension of {@link EntityInformation} to capture information about ebean entity.
10+
*/
11+
public class EbeanEntityInformation<T, ID> implements EntityInformation<T, ID> {
12+
13+
private final EbeanServer ebeanServer;
14+
15+
private final @NonNull
16+
Class<T> domainClass;
17+
18+
private Class<ID> idClass;
19+
20+
public EbeanEntityInformation(EbeanServer ebeanServer, Class<T> domainClass) {
21+
this.ebeanServer = ebeanServer;
22+
this.domainClass = domainClass;
23+
24+
Class<?> idClass = ResolvableType.forClass(domainClass).resolveGeneric(0);
25+
26+
if (idClass == null) {
27+
throw new IllegalArgumentException(String.format("Could not resolve identifier type for %s!", domainClass));
28+
}
29+
30+
this.idClass = (Class<ID>) idClass;
31+
}
32+
33+
@Override
34+
public boolean isNew(T entity) {
35+
return ebeanServer.getBeanState(entity).isNew();
36+
}
37+
38+
@Override
39+
public ID getId(T entity) {
40+
return (ID) ebeanServer.getBeanId(entity);
41+
}
42+
43+
@Override
44+
public Class<ID> getIdType() {
45+
return this.idClass;
46+
}
47+
48+
@Override
49+
public Class<T> getJavaType() {
50+
return this.domainClass;
51+
}
52+
}

src/main/java/org/springframework/data/ebean/repository/support/EbeanRepositoryFactory.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,9 @@
2323
import org.springframework.data.repository.core.EntityInformation;
2424
import org.springframework.data.repository.core.RepositoryInformation;
2525
import org.springframework.data.repository.core.RepositoryMetadata;
26-
import org.springframework.data.repository.core.support.PersistableEntityInformation;
2726
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
28-
import org.springframework.data.repository.query.EvaluationContextProvider;
2927
import org.springframework.data.repository.query.QueryLookupStrategy;
28+
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
3029
import org.springframework.util.Assert;
3130

3231
import java.io.Serializable;
@@ -63,7 +62,8 @@ public void setBeanClassLoader(ClassLoader classLoader) {
6362
@SuppressWarnings("unchecked")
6463
@Override
6564
public <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {
66-
return new PersistableEntityInformation(domainClass);
65+
66+
return new EbeanEntityInformation(this.ebeanServer, domainClass);
6767
}
6868

6969
/*
@@ -104,7 +104,7 @@ protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
104104
*/
105105
@Override
106106
protected Optional<QueryLookupStrategy> getQueryLookupStrategy(QueryLookupStrategy.Key key,
107-
EvaluationContextProvider evaluationContextProvider) {
107+
QueryMethodEvaluationContextProvider evaluationContextProvider) {
108108
return Optional.ofNullable(EbeanQueryLookupStrategy.create(ebeanServer, key, evaluationContextProvider));
109109
}
110110

src/main/java/org/springframework/data/ebean/repository/support/EbeanRepositoryFactoryBean.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.springframework.data.repository.core.support.TransactionalRepositoryFactoryBeanSupport;
2525
import org.springframework.util.Assert;
2626

27-
import java.io.Serializable;
2827

2928
/**
3029
* Special adapter for Springs {@link org.springframework.beans.factory.FactoryBean} interface to allow easy setup of
@@ -33,7 +32,7 @@
3332
* @param <T> the type of the repository
3433
* @author Xuegui Yuan
3534
*/
36-
public class EbeanRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable>
35+
public class EbeanRepositoryFactoryBean<T extends Repository<S, ID>, S, ID>
3736
extends TransactionalRepositoryFactoryBeanSupport<T, S, ID> {
3837

3938
@Autowired

src/main/java/org/springframework/data/ebean/repository/support/SimpleEbeanRepository.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818

1919
import io.ebean.*;
2020
import io.ebean.text.PathProperties;
21-
import org.springframework.data.domain.*;
21+
import org.springframework.data.domain.Example;
22+
import org.springframework.data.domain.Page;
23+
import org.springframework.data.domain.Pageable;
24+
import org.springframework.data.domain.Sort;
2225
import org.springframework.data.ebean.repository.EbeanRepository;
2326
import org.springframework.data.ebean.util.Converters;
2427
import org.springframework.data.ebean.util.ExampleExpressionBuilder;
@@ -27,7 +30,6 @@
2730
import org.springframework.util.Assert;
2831
import org.springframework.util.StringUtils;
2932

30-
import java.io.Serializable;
3133
import java.util.Collection;
3234
import java.util.List;
3335
import java.util.Optional;
@@ -42,7 +44,7 @@
4244
*/
4345
@Repository
4446
@Transactional(rollbackFor = Exception.class)
45-
public class SimpleEbeanRepository<T extends Persistable, ID extends Serializable> implements EbeanRepository<T, ID> {
47+
public class SimpleEbeanRepository<T, ID> implements EbeanRepository<T, ID> {
4648

4749
private static final String ID_MUST_NOT_BE_NULL = "The given id must not be null!";
4850
private static final String PROP_MUST_NOT_BE_NULL = "The given property must not be null!";

0 commit comments

Comments
 (0)