Hibernate 6 CASTS PARAMETRESJAVA

Программисты JAVA общаются здесь
Anonymous
Hibernate 6 CASTS PARAMETRES

Сообщение Anonymous »

Привет, получил следующее репозиторий: < /p>

Код: Выделить всё

@Repository
public interface FooRepository extends JpaRepository, JpaSpecificationExecutor {

@Query(
"""
SELECT o FROM Foo o
JOIN Fee e on o.feeId = e.id
JOIN Fii i on e.fiiId = i.id
WHERE i.id = :fiiId
AND o.id IN (
SELECT u.id
FROM Fuu u
JOIN Foo o2 on u.fooId = o2.id
WHERE u.something LIKE CONCAT('%', :param1, '_', :param2, '%')
)""")
List findByFiiIdAndFuuLikeSomeComputed(
Long fiiId, String param1, char param2);
}
< /code>
Примечания: < /p>
u.something
- это столбец, определенный как:

Код: Выделить всё

@Nullable
@Column(name = "SOMETHING", length = 25000)
private String something;
до сгибания 6:

Код: Выделить всё

select foo0_.ID                 as id1_18_,
...
from FOO foo0_
inner join FEE fee1_ on (foo0_.FEE_ID = fee1_.ID)
inner join FII fii2_ on (fee1_.FII_ID = fii2_.ID)
where fii2_.ID = ?
and (foo0_.ID in (select foo4_.ID
from FUU fuu3_
inner join FOO foo4_
on (fuu3_.FOO_ID = fuu4_.ID)
where foo3.SOMETHING like '%' || ? || '_' || ? || '%'))
< /code>
[b] после того, как я обновлен до Hibernate 6: < /strong> < /p>

[*]"Could not convert 'java.lang.Character' to 'java.lang.String' using 'org.hibernate.type.descriptor.java.StringJavaType' to wrap"
, который я исправил, заменив: char со string .
Запрос теперь включает в себя CAST , который не поддерживается DB2 Z/OS.

Код: Выделить всё

select fo1_0.ID,
...
from FOO fo1_0
join FEE fe1_0 on fo1_0.FEE_ID = fe1_0.ID
join FII fi1_0 on fe1_0.FII_ID = fi1_0.ID
where fi1_0.ID = ?
and fo1_0.ID in (
select
fo2_0.ID
from FUU fu1_0
join FOO fo2_0 on fu1_0.FOO_ID = fo2_0.ID
where fu1_0.SOMETHING like cast('%' || cast(? as varchar(25000)) || '_' || cast(? as varchar(25000)) || '%' as varchar(32672)))
Как я могу удалить состав (? как ...) при использовании org.hibernate.dialect.db2zdialect . My DB2 z/OS 12.xxx does not seem to support it.
I tried to find appropriate functions in SqlAstTranslator or SqlAstWalker and overwrote them, but it does not seem the generated query comes from here.
EDIT:[/b]
This is currently the Диалект, который я пришел, работал до сих пор, но задача актерского состава остается: < /p>
legacydb2dialect.java

Код: Выделить всё

import org.hibernate.dialect.DB2zDialect;
import org.hibernate.dialect.pagination.LegacyDB2LimitHandler;
import org.hibernate.dialect.pagination.LimitHandler;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.sql.ast.SqlAstTranslator;
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
import org.hibernate.sql.ast.tree.Statement;
import org.hibernate.sql.exec.spi.JdbcOperation;
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;

public class LegacyDb2Dialect extends DB2zDialect {

@Override
public LimitHandler getLimitHandler() {
return LegacyDB2LimitHandler.INSTANCE;
}

@Override
public SqlAstTranslatorFactory getSqlAstTranslatorFactory() {
return new StandardSqlAstTranslatorFactory() {
@Override
protected  SqlAstTranslator buildTranslator(
SessionFactoryImplementor sessionFactory, Statement statement) {
return new LegacyDb2SqlAstTranslator(sessionFactory, statement, getVersion());
}
};
}
}
< /code>
legacydb2sqlasttranslator.java
import org.hibernate.dialect.DB2zSqlAstTranslator;
import org.hibernate.dialect.DatabaseVersion;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.sql.ast.tree.Statement;
import org.hibernate.sql.exec.spi.JdbcOperation;

public class LegacyDb2SqlAstTranslator extends DB2zSqlAstTranslator {

public LegacyDb2SqlAstTranslator(
SessionFactoryImplementor sessionFactory, Statement statement, DatabaseVersion version) {
super(sessionFactory, statement, version);
}

@Override
protected boolean supportsOffsetClause() {
return false;
}
}
edit:
Я обнаружил, что слезы также выполняются при использовании спецификации/критерии и типов столбцов, таких как Bigint.

Подробнее здесь: https://stackoverflow.com/questions/782 ... parameters

Вернуться в «JAVA»