Skip to content

Commit 463bfaa

Browse files
committed
JdbcMappingHint#getDomainClass() がドメインクラスを返さない問題を修正
ドメインクラスがエンティティクラスのプロパティであり、かつSQLのバインド変数にマッピングされる場合に問題が発生していました
1 parent 706c081 commit 463bfaa

File tree

14 files changed

+63
-27
lines changed

14 files changed

+63
-27
lines changed

src/main/java/org/seasar/doma/internal/jdbc/sql/NodePreparedSqlBuilder.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import org.seasar.doma.internal.expr.ExpressionParser;
3535
import org.seasar.doma.internal.expr.Value;
3636
import org.seasar.doma.internal.expr.node.ExpressionNode;
37-
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
3837
import org.seasar.doma.internal.jdbc.scalar.Scalar;
3938
import org.seasar.doma.internal.jdbc.scalar.ScalarException;
4039
import org.seasar.doma.internal.jdbc.scalar.Scalars;
@@ -606,8 +605,8 @@ public void appendSql(String sql) {
606605
}
607606

608607
@Override
609-
public <BASIC> void appendParameter(JdbcMappable<BASIC> parameter) {
610-
p.appendParameter(new BasicInParameter<>(parameter::getWrapper));
608+
public <BASIC> void appendParameter(InParameter<BASIC> parameter) {
609+
p.appendParameter(parameter);
611610
}
612611
});
613612
return null;

src/main/java/org/seasar/doma/internal/jdbc/sql/PreparedSqlBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.util.List;
2222
import java.util.function.Function;
2323

24-
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
2524
import org.seasar.doma.jdbc.Config;
2625
import org.seasar.doma.jdbc.SqlKind;
2726
import org.seasar.doma.jdbc.SqlLogFormattingFunction;
@@ -30,7 +29,7 @@
3029

3130
public class PreparedSqlBuilder implements SqlContext {
3231

33-
protected final List<BasicInParameter<?>> parameters = new ArrayList<>();
32+
protected final List<InParameter<?>> parameters = new ArrayList<>();
3433

3534
protected final StringBuilder rawSql = new StringBuilder(200);
3635

@@ -62,12 +61,12 @@ public void cutBackSql(int length) {
6261
formattedSql.setLength(formattedSql.length() - length);
6362
}
6463

65-
public <BASIC> void appendParameter(JdbcMappable<BASIC> parameter) {
64+
public <BASIC> void appendParameter(InParameter<BASIC> parameter) {
6665
rawSql.append("?");
6766
Wrapper<BASIC> wrapper = parameter.getWrapper();
6867
formattedSql.append(wrapper.accept(config.getDialect()
6968
.getSqlLogFormattingVisitor(), formattingFunction, null));
70-
parameters.add(new BasicInParameter<BASIC>(() -> wrapper));
69+
parameters.add(parameter);
7170
}
7271

7372
public PreparedSql build(Function<String, String> commenter) {

src/main/java/org/seasar/doma/internal/jdbc/sql/SqlContext.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@
1515
*/
1616
package org.seasar.doma.internal.jdbc.sql;
1717

18-
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
1918

2019
/**
2120
* @author nakamura-to
2221
* @since 2.3.0
2322
*/
2423
public interface SqlContext {
2524

26-
<BASIC> void appendParameter(JdbcMappable<BASIC> parameter);
25+
<BASIC> void appendParameter(InParameter<BASIC> parameter);
2726

2827
void appendSql(String sql);
2928

src/main/java/org/seasar/doma/jdbc/entity/DefaultPropertyType.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.seasar.doma.internal.jdbc.scalar.OptionalIntScalar;
3636
import org.seasar.doma.internal.jdbc.scalar.OptionalLongScalar;
3737
import org.seasar.doma.internal.jdbc.scalar.Scalar;
38+
import org.seasar.doma.internal.jdbc.sql.InParameter;
39+
import org.seasar.doma.internal.jdbc.sql.ScalarInParameter;
3840
import org.seasar.doma.internal.util.ClassUtil;
3941
import org.seasar.doma.internal.util.FieldUtil;
4042
import org.seasar.doma.jdbc.Naming;
@@ -370,6 +372,11 @@ public Property<ENTITY, BASIC> save(ENTITY entity) {
370372
return this;
371373
}
372374

375+
@Override
376+
public InParameter<BASIC> asInParameter() {
377+
return delegate.asInParameter();
378+
}
379+
373380
@Override
374381
public Wrapper<BASIC> getWrapper() {
375382
return delegate.getWrapper();
@@ -422,6 +429,11 @@ public Property<ENTITY, BASIC> save(ENTITY entity) {
422429
return this;
423430
}
424431

432+
@Override
433+
public InParameter<BASIC> asInParameter() {
434+
return new ScalarInParameter<>(scalar);
435+
}
436+
425437
@Override
426438
public Wrapper<BASIC> getWrapper() {
427439
return scalar.getWrapper();

src/main/java/org/seasar/doma/jdbc/entity/Property.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.seasar.doma.jdbc.entity;
1717

1818
import org.seasar.doma.internal.jdbc.command.JdbcMappable;
19+
import org.seasar.doma.internal.jdbc.sql.InParameter;
1920

2021
/**
2122
* プロパティです。
@@ -55,4 +56,12 @@ public interface Property<ENTITY, BASIC> extends JdbcMappable<BASIC> {
5556
*/
5657
Property<ENTITY, BASIC> save(ENTITY entity);
5758

59+
/**
60+
* このプロパティを入力用パラメータとして返します。
61+
*
62+
* @return 入力用パラメータ
63+
* @since 2.4.0
64+
*/
65+
InParameter<BASIC> asInParameter();
66+
5867
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ protected void prepareSql() {
109109
builder.appendSql(propertyType.getColumnName(naming::apply,
110110
dialect::applyQuote));
111111
builder.appendSql(" = ");
112-
builder.appendParameter(property);
112+
builder.appendParameter(property.asInParameter());
113113
builder.appendSql(" and ");
114114
}
115115
builder.cutBackSql(5);
@@ -125,7 +125,7 @@ protected void prepareSql() {
125125
builder.appendSql(versionPropertyType.getColumnName(naming::apply,
126126
dialect::applyQuote));
127127
builder.appendSql(" = ");
128-
builder.appendParameter(property);
128+
builder.appendParameter(property.asInParameter());
129129
}
130130
PreparedSql sql = builder.build(this::comment);
131131
sqls.add(sql);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ protected void prepareSql() {
180180
for (EntityPropertyType<ENTITY, ?> propertyType : targetPropertyTypes) {
181181
Property<ENTITY, ?> property = propertyType.createProperty();
182182
property.load(currentEntity);
183-
builder.appendParameter(property);
183+
builder.appendParameter(property.asInParameter());
184184
builder.appendSql(", ");
185185
}
186186
builder.cutBackSql(2);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ protected void prepareSql() {
126126
builder.appendSql(propertyType.getColumnName(naming::apply,
127127
dialect::applyQuote));
128128
builder.appendSql(" = ");
129-
builder.appendParameter(property);
129+
builder.appendParameter(property.asInParameter());
130130
builder.appendSql(" and ");
131131
}
132132
builder.cutBackSql(5);
@@ -142,7 +142,7 @@ protected void prepareSql() {
142142
builder.appendSql(versionPropertyType.getColumnName(naming::apply,
143143
dialect::applyQuote));
144144
builder.appendSql(" = ");
145-
builder.appendParameter(property);
145+
builder.appendParameter(property.asInParameter());
146146
}
147147
PreparedSql sql = builder.build(this::comment);
148148
sqls.add(sql);

src/main/java/org/seasar/doma/jdbc/query/AutoDeleteQuery.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ protected void prepareSql() {
9393
builder.appendSql(propertyType.getColumnName(naming::apply,
9494
dialect::applyQuote));
9595
builder.appendSql(" = ");
96-
builder.appendParameter(property);
96+
builder.appendParameter(property.asInParameter());
9797
builder.appendSql(" and ");
9898
}
9999
builder.cutBackSql(5);
@@ -109,7 +109,7 @@ protected void prepareSql() {
109109
builder.appendSql(versionPropertyType.getColumnName(naming::apply,
110110
dialect::applyQuote));
111111
builder.appendSql(" = ");
112-
builder.appendParameter(property);
112+
builder.appendParameter(property.asInParameter());
113113
}
114114
sql = builder.build(this::comment);
115115
}

src/main/java/org/seasar/doma/jdbc/query/AutoInsertQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ protected void prepareSql() {
163163
for (EntityPropertyType<ENTITY, ?> propertyType : targetPropertyTypes) {
164164
Property<ENTITY, ?> property = propertyType.createProperty();
165165
property.load(entity);
166-
builder.appendParameter(property);
166+
builder.appendParameter(property.asInParameter());
167167
builder.appendSql(", ");
168168
}
169169
builder.cutBackSql(2);

0 commit comments

Comments
 (0)