Skip to content

Commit 334927a

Browse files
committed
Support the "ignoreVersion" and the "suppressOptimisticLockException" settings
1 parent c813ad8 commit 334927a

22 files changed

+284
-97
lines changed

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/Entityql.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import java.util.List;
44
import java.util.Objects;
55
import java.util.function.Consumer;
6+
import org.seasar.doma.jdbc.BatchResult;
67
import org.seasar.doma.jdbc.Config;
8+
import org.seasar.doma.jdbc.Result;
79
import org.seasar.doma.jdbc.criteria.context.DeleteSettings;
810
import org.seasar.doma.jdbc.criteria.context.InsertSettings;
911
import org.seasar.doma.jdbc.criteria.context.SelectContext;
@@ -43,13 +45,14 @@ public <ENTITY> EntityqlSelectStatement<ENTITY> from(
4345
return new EntityqlSelectStatement<>(config, declaration);
4446
}
4547

46-
public <ENTITY> Statement<ENTITY> update(EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
48+
public <ENTITY> Statement<Result<ENTITY>> update(
49+
EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
4750
Objects.requireNonNull(entityMetamodel);
4851
Objects.requireNonNull(entity);
4952
return update(entityMetamodel, entity, settings -> {});
5053
}
5154

52-
public <ENTITY> Statement<ENTITY> update(
55+
public <ENTITY> Statement<Result<ENTITY>> update(
5356
EntityMetamodel<ENTITY> entityMetamodel,
5457
ENTITY entity,
5558
Consumer<UpdateSettings> settingsConsumer) {
@@ -61,13 +64,14 @@ public <ENTITY> Statement<ENTITY> update(
6164
return new EntityqlUpdateStatement<>(config, entityMetamodel, entity, settings);
6265
}
6366

64-
public <ENTITY> Statement<ENTITY> delete(EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
67+
public <ENTITY> Statement<Result<ENTITY>> delete(
68+
EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
6569
Objects.requireNonNull(entityMetamodel);
6670
Objects.requireNonNull(entity);
6771
return delete(entityMetamodel, entity, settings -> {});
6872
}
6973

70-
public <ENTITY> Statement<ENTITY> delete(
74+
public <ENTITY> Statement<Result<ENTITY>> delete(
7175
EntityMetamodel<ENTITY> entityMetamodel,
7276
ENTITY entity,
7377
Consumer<DeleteSettings> settingsConsumer) {
@@ -79,13 +83,14 @@ public <ENTITY> Statement<ENTITY> delete(
7983
return new EntityqlDeleteStatement<>(config, entityMetamodel, entity, settings);
8084
}
8185

82-
public <ENTITY> Statement<ENTITY> insert(EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
86+
public <ENTITY> Statement<Result<ENTITY>> insert(
87+
EntityMetamodel<ENTITY> entityMetamodel, ENTITY entity) {
8388
Objects.requireNonNull(entityMetamodel);
8489
Objects.requireNonNull(entity);
8590
return insert(entityMetamodel, entity, settings -> {});
8691
}
8792

88-
public <ENTITY> Statement<ENTITY> insert(
93+
public <ENTITY> Statement<Result<ENTITY>> insert(
8994
EntityMetamodel<ENTITY> entityMetamodel,
9095
ENTITY entity,
9196
Consumer<InsertSettings> settingsConsumer) {
@@ -97,14 +102,14 @@ public <ENTITY> Statement<ENTITY> insert(
97102
return new EntityqlInsertStatement<>(config, entityMetamodel, entity, settings);
98103
}
99104

100-
public <ENTITY> Statement<List<ENTITY>> update(
105+
public <ENTITY> Statement<BatchResult<ENTITY>> update(
101106
EntityMetamodel<ENTITY> entityMetamodel, List<ENTITY> entities) {
102107
Objects.requireNonNull(entityMetamodel);
103108
Objects.requireNonNull(entities);
104109
return update(entityMetamodel, entities, settings -> {});
105110
}
106111

107-
public <ENTITY> Statement<List<ENTITY>> update(
112+
public <ENTITY> Statement<BatchResult<ENTITY>> update(
108113
EntityMetamodel<ENTITY> entityMetamodel,
109114
List<ENTITY> entities,
110115
Consumer<UpdateSettings> settingsConsumer) {
@@ -116,14 +121,14 @@ public <ENTITY> Statement<List<ENTITY>> update(
116121
return new EntityqlBatchUpdateStatement<>(config, entityMetamodel, entities, settings);
117122
}
118123

119-
public <ENTITY> Statement<List<ENTITY>> delete(
124+
public <ENTITY> Statement<BatchResult<ENTITY>> delete(
120125
EntityMetamodel<ENTITY> entityMetamodel, List<ENTITY> entities) {
121126
Objects.requireNonNull(entityMetamodel);
122127
Objects.requireNonNull(entities);
123128
return delete(entityMetamodel, entities, settings -> {});
124129
}
125130

126-
public <ENTITY> Statement<List<ENTITY>> delete(
131+
public <ENTITY> Statement<BatchResult<ENTITY>> delete(
127132
EntityMetamodel<ENTITY> entityMetamodel,
128133
List<ENTITY> entities,
129134
Consumer<DeleteSettings> settingsConsumer) {
@@ -135,14 +140,14 @@ public <ENTITY> Statement<List<ENTITY>> delete(
135140
return new EntityqlBatchDeleteStatement<>(config, entityMetamodel, entities, settings);
136141
}
137142

138-
public <ENTITY> Statement<List<ENTITY>> insert(
143+
public <ENTITY> Statement<BatchResult<ENTITY>> insert(
139144
EntityMetamodel<ENTITY> entityMetamodel, List<ENTITY> entities) {
140145
Objects.requireNonNull(entityMetamodel);
141146
Objects.requireNonNull(entities);
142147
return insert(entityMetamodel, entities, settings -> {});
143148
}
144149

145-
public <ENTITY> Statement<List<ENTITY>> insert(
150+
public <ENTITY> Statement<BatchResult<ENTITY>> insert(
146151
EntityMetamodel<ENTITY> entityMetamodel,
147152
List<ENTITY> entities,
148153
Consumer<InsertSettings> settingsConsumer) {

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/DeleteSettings.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
public class DeleteSettings extends Settings {
44
private int batchSize = 0;
55
private boolean allowEmptyWhere;
6+
private boolean ignoreVersion;
7+
private boolean suppressOptimisticLockException;
68

79
public int getBatchSize() {
810
return batchSize;
@@ -19,4 +21,20 @@ public boolean getAllowEmptyWhere() {
1921
public void setAllowEmptyWhere(boolean allowEmptyWhere) {
2022
this.allowEmptyWhere = allowEmptyWhere;
2123
}
24+
25+
public boolean getIgnoreVersion() {
26+
return ignoreVersion;
27+
}
28+
29+
public void setIgnoreVersion(boolean ignoreVersion) {
30+
this.ignoreVersion = ignoreVersion;
31+
}
32+
33+
public boolean getSuppressOptimisticLockException() {
34+
return suppressOptimisticLockException;
35+
}
36+
37+
public void setSuppressOptimisticLockException(boolean suppressOptimisticLockException) {
38+
this.suppressOptimisticLockException = suppressOptimisticLockException;
39+
}
2240
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/context/UpdateSettings.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
public class UpdateSettings extends Settings {
44
private int batchSize = 0;
55
private boolean allowEmptyWhere;
6+
private boolean ignoreVersion;
7+
private boolean suppressOptimisticLockException;
68

79
public int getBatchSize() {
810
return batchSize;
@@ -19,4 +21,20 @@ public boolean getAllowEmptyWhere() {
1921
public void setAllowEmptyWhere(boolean allowEmptyWhere) {
2022
this.allowEmptyWhere = allowEmptyWhere;
2123
}
24+
25+
public boolean getIgnoreVersion() {
26+
return ignoreVersion;
27+
}
28+
29+
public void setIgnoreVersion(boolean ignoreVersion) {
30+
this.ignoreVersion = ignoreVersion;
31+
}
32+
33+
public boolean getSuppressOptimisticLockException() {
34+
return suppressOptimisticLockException;
35+
}
36+
37+
public void setSuppressOptimisticLockException(boolean suppressOptimisticLockException) {
38+
this.suppressOptimisticLockException = suppressOptimisticLockException;
39+
}
2240
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/statement/EntityqlBatchDeleteStatement.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44
import java.util.Objects;
5+
import org.seasar.doma.jdbc.BatchResult;
56
import org.seasar.doma.jdbc.Config;
67
import org.seasar.doma.jdbc.Sql;
78
import org.seasar.doma.jdbc.SqlKind;
@@ -14,7 +15,7 @@
1415
import org.seasar.doma.jdbc.query.Query;
1516

1617
public class EntityqlBatchDeleteStatement<ENTITY>
17-
extends AbstractStatement<EntityqlBatchDeleteStatement<ENTITY>, List<ENTITY>> {
18+
extends AbstractStatement<EntityqlBatchDeleteStatement<ENTITY>, BatchResult<ENTITY>> {
1819

1920
private static final EmptySql EMPTY_SQL = new EmptySql(SqlKind.BATCH_DELETE);
2021
private final EntityMetamodel<ENTITY> entityMetamodel;
@@ -33,7 +34,7 @@ public EntityqlBatchDeleteStatement(
3334
}
3435

3536
@Override
36-
protected Command<List<ENTITY>> createCommand() {
37+
protected Command<BatchResult<ENTITY>> createCommand() {
3738
EntityType<ENTITY> entityType = entityMetamodel.asType();
3839
AutoBatchDeleteQuery<ENTITY> query =
3940
config.getQueryImplementors().createAutoBatchDeleteQuery(EXECUTE_METHOD, entityType);
@@ -45,23 +46,23 @@ protected Command<List<ENTITY>> createCommand() {
4546
query.setQueryTimeout(settings.getQueryTimeout());
4647
query.setBatchSize(settings.getBatchSize());
4748
query.setSqlLogType(settings.getSqlLogType());
48-
query.setVersionIgnored(false);
49-
query.setOptimisticLockExceptionSuppressed(false);
49+
query.setVersionIgnored(settings.getIgnoreVersion());
50+
query.setOptimisticLockExceptionSuppressed(settings.getSuppressOptimisticLockException());
5051
query.setMessage(settings.getComment());
5152
query.prepare();
5253
BatchDeleteCommand command =
5354
config.getCommandImplementors().createBatchDeleteCommand(EXECUTE_METHOD, query);
54-
return new Command<List<ENTITY>>() {
55+
return new Command<BatchResult<ENTITY>>() {
5556
@Override
5657
public Query getQuery() {
5758
return query;
5859
}
5960

6061
@Override
61-
public List<ENTITY> execute() {
62-
command.execute();
62+
public BatchResult<ENTITY> execute() {
63+
int[] counts = command.execute();
6364
query.complete();
64-
return query.getEntities();
65+
return new BatchResult<>(counts, query.getEntities());
6566
}
6667
};
6768
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/statement/EntityqlBatchInsertStatement.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44
import java.util.Objects;
5+
import org.seasar.doma.jdbc.BatchResult;
56
import org.seasar.doma.jdbc.Config;
67
import org.seasar.doma.jdbc.Sql;
78
import org.seasar.doma.jdbc.SqlKind;
@@ -14,7 +15,7 @@
1415
import org.seasar.doma.jdbc.query.Query;
1516

1617
public class EntityqlBatchInsertStatement<ENTITY>
17-
extends AbstractStatement<EntityqlBatchInsertStatement<ENTITY>, List<ENTITY>> {
18+
extends AbstractStatement<EntityqlBatchInsertStatement<ENTITY>, BatchResult<ENTITY>> {
1819

1920
private static final EmptySql EMPTY_SQL = new EmptySql(SqlKind.BATCH_INSERT);
2021
private final EntityMetamodel<ENTITY> entityMetamodel;
@@ -33,7 +34,7 @@ public EntityqlBatchInsertStatement(
3334
}
3435

3536
@Override
36-
protected Command<List<ENTITY>> createCommand() {
37+
protected Command<BatchResult<ENTITY>> createCommand() {
3738
EntityType<ENTITY> entityType = entityMetamodel.asType();
3839
AutoBatchInsertQuery<ENTITY> query =
3940
config.getQueryImplementors().createAutoBatchInsertQuery(EXECUTE_METHOD, entityType);
@@ -51,17 +52,17 @@ protected Command<List<ENTITY>> createCommand() {
5152
query.prepare();
5253
BatchInsertCommand command =
5354
config.getCommandImplementors().createBatchInsertCommand(EXECUTE_METHOD, query);
54-
return new Command<List<ENTITY>>() {
55+
return new Command<BatchResult<ENTITY>>() {
5556
@Override
5657
public Query getQuery() {
5758
return query;
5859
}
5960

6061
@Override
61-
public List<ENTITY> execute() {
62-
command.execute();
62+
public BatchResult<ENTITY> execute() {
63+
int[] counts = command.execute();
6364
query.complete();
64-
return query.getEntities();
65+
return new BatchResult<>(counts, query.getEntities());
6566
}
6667
};
6768
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/statement/EntityqlBatchUpdateStatement.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44
import java.util.Objects;
5+
import org.seasar.doma.jdbc.BatchResult;
56
import org.seasar.doma.jdbc.Config;
67
import org.seasar.doma.jdbc.Sql;
78
import org.seasar.doma.jdbc.SqlKind;
@@ -14,7 +15,7 @@
1415
import org.seasar.doma.jdbc.query.Query;
1516

1617
public class EntityqlBatchUpdateStatement<ENTITY>
17-
extends AbstractStatement<EntityqlBatchUpdateStatement<ENTITY>, List<ENTITY>> {
18+
extends AbstractStatement<EntityqlBatchUpdateStatement<ENTITY>, BatchResult<ENTITY>> {
1819

1920
private static final EmptySql EMPTY_SQL = new EmptySql(SqlKind.BATCH_UPDATE);
2021
private final EntityMetamodel<ENTITY> entityMetamodel;
@@ -33,7 +34,7 @@ public EntityqlBatchUpdateStatement(
3334
}
3435

3536
@Override
36-
protected Command<List<ENTITY>> createCommand() {
37+
protected Command<BatchResult<ENTITY>> createCommand() {
3738
EntityType<ENTITY> entityType = entityMetamodel.asType();
3839
AutoBatchUpdateQuery<ENTITY> query =
3940
config.getQueryImplementors().createAutoBatchUpdateQuery(EXECUTE_METHOD, entityType);
@@ -45,25 +46,25 @@ protected Command<List<ENTITY>> createCommand() {
4546
query.setQueryTimeout(settings.getQueryTimeout());
4647
query.setBatchSize(settings.getBatchSize());
4748
query.setSqlLogType(settings.getSqlLogType());
48-
query.setVersionIgnored(false);
49+
query.setVersionIgnored(settings.getIgnoreVersion());
4950
query.setIncludedPropertyNames();
5051
query.setExcludedPropertyNames();
51-
query.setOptimisticLockExceptionSuppressed(false);
52+
query.setOptimisticLockExceptionSuppressed(settings.getSuppressOptimisticLockException());
5253
query.setMessage(settings.getComment());
5354
query.prepare();
5455
BatchUpdateCommand command =
5556
config.getCommandImplementors().createBatchUpdateCommand(EXECUTE_METHOD, query);
56-
return new Command<List<ENTITY>>() {
57+
return new Command<BatchResult<ENTITY>>() {
5758
@Override
5859
public Query getQuery() {
5960
return query;
6061
}
6162

6263
@Override
63-
public List<ENTITY> execute() {
64-
command.execute();
64+
public BatchResult<ENTITY> execute() {
65+
int[] counts = command.execute();
6566
query.complete();
66-
return query.getEntities();
67+
return new BatchResult<>(counts, query.getEntities());
6768
}
6869
};
6970
}

doma-core/src/main/java/org/seasar/doma/jdbc/criteria/statement/EntityqlDeleteStatement.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Objects;
44
import org.seasar.doma.jdbc.Config;
5+
import org.seasar.doma.jdbc.Result;
56
import org.seasar.doma.jdbc.command.Command;
67
import org.seasar.doma.jdbc.command.DeleteCommand;
78
import org.seasar.doma.jdbc.criteria.context.DeleteSettings;
@@ -11,7 +12,7 @@
1112
import org.seasar.doma.jdbc.query.Query;
1213

1314
public class EntityqlDeleteStatement<ENTITY>
14-
extends AbstractStatement<EntityqlDeleteStatement<ENTITY>, ENTITY> {
15+
extends AbstractStatement<EntityqlDeleteStatement<ENTITY>, Result<ENTITY>> {
1516

1617
private final EntityMetamodel<ENTITY> entityMetamodel;
1718
private final ENTITY entity;
@@ -29,7 +30,7 @@ public EntityqlDeleteStatement(
2930
}
3031

3132
@Override
32-
protected Command<ENTITY> createCommand() {
33+
protected Command<Result<ENTITY>> createCommand() {
3334
EntityType<ENTITY> entityType = entityMetamodel.asType();
3435
AutoDeleteQuery<ENTITY> query =
3536
config.getQueryImplementors().createAutoDeleteQuery(EXECUTE_METHOD, entityType);
@@ -40,23 +41,23 @@ protected Command<ENTITY> createCommand() {
4041
query.setCallerMethodName(EXECUTE_METHOD_NAME);
4142
query.setQueryTimeout(settings.getQueryTimeout());
4243
query.setSqlLogType(settings.getSqlLogType());
43-
query.setVersionIgnored(false);
44-
query.setOptimisticLockExceptionSuppressed(false);
44+
query.setVersionIgnored(settings.getIgnoreVersion());
45+
query.setOptimisticLockExceptionSuppressed(settings.getSuppressOptimisticLockException());
4546
query.setMessage(settings.getComment());
4647
query.prepare();
4748
DeleteCommand command =
4849
config.getCommandImplementors().createDeleteCommand(EXECUTE_METHOD, query);
49-
return new Command<ENTITY>() {
50+
return new Command<Result<ENTITY>>() {
5051
@Override
5152
public Query getQuery() {
5253
return query;
5354
}
5455

5556
@Override
56-
public ENTITY execute() {
57-
command.execute();
57+
public Result<ENTITY> execute() {
58+
int count = command.execute();
5859
query.complete();
59-
return query.getEntity();
60+
return new Result<>(count, query.getEntity());
6061
}
6162
};
6263
}

0 commit comments

Comments
 (0)