Самый простой способ сделать это - использовать псевдоним таблицы, когда вы ссылаетесь на родительскую таблицу запросов внутри подзапроса.
Пример:
insert into xxx_tab (trans_id) values ((select max(trans_id)+1 from xxx_tab));
Измените его на:
insert into xxx_tab (trans_id) values ((select max(P.trans_id)+1 from xxx_tab P));
Если вы используете Constructor Injection вместо Field Injection, вы, вероятно, получите довольно полезное исключение, я могу только догадываться, но кажется, что у Spring нет Marshaller в контексте Spring, поэтому вам нужно где-то предоставить метод @Bean, например
@Bean
public Jaxb2Marshaller jaxb2Marshaller () {
return new Jaxb2Marshaller(foo, bar, ..);
}
Вы можете прочитать здесь, почему вам следует избегать инъекции поля: https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/
Ваша проблема в том, что вы не позволяете Spring управлять MyEndpointInterceptor. При использовании Spring вы не должны использовать конструктор напрямую. Но пусть Spring соберет для вас боб.
Ваша конфигурация должна выглядеть следующим образом:
@Configuration
@EnableWs
public class MyWebServiceConfiguration extends WsConfigurerAdapter {
@Bean(name = "marshaller")
public Jaxb2Marshaller createJaxb2Marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
return marshaller;
}
@Autowired
private MyEndpointInterceptor myEndpointInterceptor;
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors)
{
// Register interceptor
interceptors.add(myEndpointInterceptor);
}
}