Skip to content

Commit 26642f4

Browse files
authored
Fixed a bug that occurred when the update columns was empty in AutoBatchUpdateQuery (#1037)
1 parent f122824 commit 26642f4

File tree

7 files changed

+152
-6
lines changed

7 files changed

+152
-6
lines changed

doma-core/src/main/java/org/seasar/doma/jdbc/query/AutoBatchDeleteQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void prepare() {
3737
return;
3838
}
3939
executable = true;
40-
executionSkipCause = null;
40+
sqlExecutionSkipCause = null;
4141
currentEntity = entities.get(0);
4242
preDelete();
4343
prepareIdAndVersionPropertyTypes();

doma-core/src/main/java/org/seasar/doma/jdbc/query/AutoBatchInsertQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void prepare() {
5252
return;
5353
}
5454
executable = true;
55-
executionSkipCause = null;
55+
sqlExecutionSkipCause = null;
5656
currentEntity = entities.get(0);
5757
preInsert();
5858
prepareIdAndVersionPropertyTypes();

doma-core/src/main/java/org/seasar/doma/jdbc/query/AutoBatchModifyQuery.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public abstract class AutoBatchModifyQuery<ENTITY> extends AbstractQuery
4040

4141
protected boolean executable;
4242

43-
protected SqlExecutionSkipCause executionSkipCause =
43+
protected SqlExecutionSkipCause sqlExecutionSkipCause =
4444
SqlExecutionSkipCause.BATCH_TARGET_NONEXISTENT;
4545

4646
protected List<PreparedSql> sqls;
@@ -164,7 +164,7 @@ public boolean isExecutable() {
164164

165165
@Override
166166
public SqlExecutionSkipCause getSqlExecutionSkipCause() {
167-
return executionSkipCause;
167+
return sqlExecutionSkipCause;
168168
}
169169

170170
@Override

doma-core/src/main/java/org/seasar/doma/jdbc/query/AutoBatchUpdateQuery.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ public void prepare() {
3838
if (size == 0) {
3939
return;
4040
}
41-
executable = true;
42-
executionSkipCause = null;
4341
currentEntity = entities.get(0);
4442
setupHelper();
4543
preUpdate();
@@ -89,6 +87,10 @@ protected void prepareOptimisticLock() {
8987

9088
protected void prepareTargetPropertyTypes() {
9189
targetPropertyTypes = helper.getTargetPropertyTypes();
90+
if (!targetPropertyTypes.isEmpty()) {
91+
executable = true;
92+
sqlExecutionSkipCause = null;
93+
}
9294
}
9395

9496
protected void prepareSql() {
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package org.seasar.doma.it.entity;
2+
3+
import org.seasar.doma.Entity;
4+
import org.seasar.doma.Id;
5+
import org.seasar.doma.Metamodel;
6+
import org.seasar.doma.OriginalStates;
7+
import org.seasar.doma.Table;
8+
import org.seasar.doma.Transient;
9+
import org.seasar.doma.it.domain.Identity;
10+
import org.seasar.doma.it.domain.Salary;
11+
12+
@Entity(metamodel = @Metamodel)
13+
@Table(name = "EMPLOYEE")
14+
public class IdColumnOnlyEmployee {
15+
16+
@Id private Integer employeeId;
17+
18+
@Id private Integer employeeNo;
19+
20+
@Id private String employeeName;
21+
22+
@Id private Integer managerId;
23+
24+
@Id private java.sql.Date hiredate;
25+
26+
@Id private Salary salary;
27+
28+
@Id private Identity<Department> departmentId;
29+
30+
@Id private Integer addressId;
31+
32+
@Id private Integer version;
33+
34+
@OriginalStates private IdColumnOnlyEmployee originalStates;
35+
36+
@Transient Department department;
37+
38+
public Integer getEmployeeId() {
39+
return employeeId;
40+
}
41+
42+
public void setEmployeeId(Integer employee_id) {
43+
this.employeeId = employee_id;
44+
}
45+
46+
public Integer getEmployeeNo() {
47+
return employeeNo;
48+
}
49+
50+
public void setEmployeeNo(Integer employeeNo) {
51+
this.employeeNo = employeeNo;
52+
}
53+
54+
public String getEmployeeName() {
55+
return employeeName;
56+
}
57+
58+
public void setEmployeeName(String employeeName) {
59+
this.employeeName = employeeName;
60+
}
61+
62+
public Integer getManagerId() {
63+
return managerId;
64+
}
65+
66+
public void setManagerId(Integer managerId) {
67+
this.managerId = managerId;
68+
}
69+
70+
public java.sql.Date getHiredate() {
71+
return hiredate;
72+
}
73+
74+
public void setHiredate(java.sql.Date hiredate) {
75+
this.hiredate = hiredate;
76+
}
77+
78+
public Salary getSalary() {
79+
return salary;
80+
}
81+
82+
public void setSalary(Salary salary) {
83+
this.salary = salary;
84+
}
85+
86+
public Identity<Department> getDepartmentId() {
87+
return departmentId;
88+
}
89+
90+
public void setDepartmentId(Identity<Department> departmentId) {
91+
this.departmentId = departmentId;
92+
}
93+
94+
public Integer getAddressId() {
95+
return addressId;
96+
}
97+
98+
public void setAddressId(Integer addressId) {
99+
this.addressId = addressId;
100+
}
101+
102+
public Integer getVersion() {
103+
return version;
104+
}
105+
106+
public void setVersion(Integer version) {
107+
this.version = version;
108+
}
109+
110+
public Department getDepartment() {
111+
return department;
112+
}
113+
114+
public void setDepartment(Department department) {
115+
this.department = department;
116+
}
117+
}

integration-test-java/src/test/java/org/seasar/doma/it/criteria/EntityqlBatchUpdateTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import org.junit.jupiter.api.Test;
1111
import org.junit.jupiter.api.extension.ExtendWith;
1212
import org.seasar.doma.it.IntegrationTestEnvironment;
13+
import org.seasar.doma.it.entity.IdColumnOnlyEmployee;
14+
import org.seasar.doma.it.entity.IdColumnOnlyEmployee_;
1315
import org.seasar.doma.jdbc.BatchResult;
1416
import org.seasar.doma.jdbc.Config;
1517
import org.seasar.doma.jdbc.criteria.Entityql;
@@ -67,4 +69,16 @@ void empty() {
6769
BatchResult<Employee> result = entityql.update(e, Collections.emptyList()).execute();
6870
assertTrue(result.getEntities().isEmpty());
6971
}
72+
73+
@Test
74+
void idColumnOnlyEntity() {
75+
IdColumnOnlyEmployee_ e = new IdColumnOnlyEmployee_();
76+
77+
IdColumnOnlyEmployee employee = entityql.from(e).where(c -> c.eq(e.employeeId, 5)).fetchOne();
78+
79+
List<IdColumnOnlyEmployee> employeesList = Collections.singletonList(employee);
80+
BatchResult<IdColumnOnlyEmployee> result = entityql.update(e, employeesList).execute();
81+
assertEquals(employeesList, result.getEntities());
82+
assertEquals(0, result.getCounts().length);
83+
}
7084
}

integration-test-java/src/test/java/org/seasar/doma/it/criteria/EntityqlUpdateTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import org.junit.jupiter.api.Test;
88
import org.junit.jupiter.api.extension.ExtendWith;
99
import org.seasar.doma.it.IntegrationTestEnvironment;
10+
import org.seasar.doma.it.entity.IdColumnOnlyEmployee;
11+
import org.seasar.doma.it.entity.IdColumnOnlyEmployee_;
1012
import org.seasar.doma.jdbc.Config;
1113
import org.seasar.doma.jdbc.Result;
1214
import org.seasar.doma.jdbc.criteria.Entityql;
@@ -52,4 +54,15 @@ void suppressOptimisticLockException() {
5254
.execute();
5355
assertEquals(0, result.getCount());
5456
}
57+
58+
@Test
59+
void idColumnOnlyEntity() {
60+
IdColumnOnlyEmployee_ e = new IdColumnOnlyEmployee_();
61+
62+
IdColumnOnlyEmployee employee = entityql.from(e).where(c -> c.eq(e.employeeId, 5)).fetchOne();
63+
64+
Result<IdColumnOnlyEmployee> result = entityql.update(e, employee).execute();
65+
assertEquals(employee, result.getEntity());
66+
assertEquals(0, result.getCount());
67+
}
5568
}

0 commit comments

Comments
 (0)