mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-16 08:05:05 +00:00
HHH-8944 - ColumnTransformer handling is too aggressive in qualifying "column names"
This commit is contained in:
parent
6c0c44f7d0
commit
5803ad5839
@ -649,10 +649,17 @@ private void extractDataFromPropertyData(PropertyData inferredData) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void processExpression(ColumnTransformer annotation) {
|
private void processExpression(ColumnTransformer annotation) {
|
||||||
String nonNullLogicalColumnName = logicalColumnName != null ? logicalColumnName : ""; //use the default for annotations
|
if ( annotation == null ) {
|
||||||
if ( annotation != null &&
|
return;
|
||||||
( StringHelper.isEmpty( annotation.forColumn() )
|
}
|
||||||
|| annotation.forColumn().equals( nonNullLogicalColumnName ) ) ) {
|
|
||||||
|
final String nonNullLogicalColumnName = logicalColumnName != null
|
||||||
|
? logicalColumnName
|
||||||
|
//use the default for annotations
|
||||||
|
: "";
|
||||||
|
|
||||||
|
if ( StringHelper.isEmpty( annotation.forColumn() )
|
||||||
|
|| annotation.forColumn().equals( nonNullLogicalColumnName ) ) {
|
||||||
readExpression = annotation.read();
|
readExpression = annotation.read();
|
||||||
if ( StringHelper.isEmpty( readExpression ) ) {
|
if ( StringHelper.isEmpty( readExpression ) ) {
|
||||||
readExpression = null;
|
readExpression = null;
|
||||||
|
@ -269,12 +269,13 @@ public boolean hasCheckConstraint() {
|
|||||||
@Override
|
@Override
|
||||||
public String getTemplate(Dialect dialect, SQLFunctionRegistry functionRegistry) {
|
public String getTemplate(Dialect dialect, SQLFunctionRegistry functionRegistry) {
|
||||||
return hasCustomRead()
|
return hasCustomRead()
|
||||||
? Template.renderWhereStringTemplate( customRead, dialect, functionRegistry )
|
// see note in renderTransformerReadFragment wrt access to SessionFactory
|
||||||
|
? Template.renderTransformerReadFragment( customRead, getQuotedName( dialect ) )
|
||||||
: Template.TEMPLATE + '.' + getQuotedName( dialect );
|
: Template.TEMPLATE + '.' + getQuotedName( dialect );
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasCustomRead() {
|
public boolean hasCustomRead() {
|
||||||
return ( customRead != null && customRead.length() > 0 );
|
return customRead != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getReadExpr(Dialect dialect) {
|
public String getReadExpr(Dialect dialect) {
|
||||||
@ -345,7 +346,7 @@ public String getCustomRead() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setCustomRead(String customRead) {
|
public void setCustomRead(String customRead) {
|
||||||
this.customRead = customRead;
|
this.customRead = StringHelper.nullIfEmpty( customRead );
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCanonicalName() {
|
public String getCanonicalName() {
|
||||||
|
@ -88,6 +88,16 @@ public final class Template {
|
|||||||
|
|
||||||
private Template() {}
|
private Template() {}
|
||||||
|
|
||||||
|
public static String renderTransformerReadFragment(
|
||||||
|
String fragment,
|
||||||
|
String... columnNames) {
|
||||||
|
// NOTE : would need access to SessionFactoryImplementor to make this configurable
|
||||||
|
for ( String columnName : columnNames ) {
|
||||||
|
fragment = fragment.replace( columnName, TEMPLATE + '.' + columnName );
|
||||||
|
}
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
public static String renderWhereStringTemplate(String sqlWhereString, Dialect dialect, SQLFunctionRegistry functionRegistry) {
|
public static String renderWhereStringTemplate(String sqlWhereString, Dialect dialect, SQLFunctionRegistry functionRegistry) {
|
||||||
return renderWhereStringTemplate(sqlWhereString, TEMPLATE, dialect, functionRegistry);
|
return renderWhereStringTemplate(sqlWhereString, TEMPLATE, dialect, functionRegistry);
|
||||||
}
|
}
|
||||||
|
@ -55,4 +55,12 @@ public Staff(double sizeInInches, double radius, double diameter, Integer id) {
|
|||||||
public double getDiameter() { return diameter; }
|
public double getDiameter() { return diameter; }
|
||||||
public void setDiameter(double diameter) { this.diameter = diameter; }
|
public void setDiameter(double diameter) { this.diameter = diameter; }
|
||||||
private double diameter;
|
private double diameter;
|
||||||
|
|
||||||
|
@Column(name="kooky")
|
||||||
|
@ColumnTransformer(
|
||||||
|
read = "cast( kooky as VARCHAR )"
|
||||||
|
)
|
||||||
|
public String getKooky() { return kooky; }
|
||||||
|
public void setKooky(String kooky) { this.kooky = kooky; }
|
||||||
|
private String kooky;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user