Честно казано, навлязохте доста дълбоко по въпроса тук @Zon. Не съм сигурен дали мога да ви помогна достатъчно, но въпреки това ще опитам.
Изследователска точка 1 очевидно е най-прагматичното решение, за да накарате нещата да работят точно сега. Ако искате да забележите "неефективността" на String в сравнение с UUID е нещо, за което трудно бих се притиснал. Така че, ако това е абсолютно не, разследването трябва да продължи. В противен случай, разбира се, върши работата.
Що се отнася до изследователски точки 2 и 3, вярвам, че срещате проблем с диалекта, използван за PostgreSQL, въпреки че тук не съм 100% сигурен. Особено PostgreSQL размахва няколко "страхотни" типа, но те не винаги работят автоматично във всички сценарии. Базирам „догадките“ си тук върху принуждаването на PostgreSQL да използва BYTEA вместо OID в случай че искате да намалите TOAST
на Postgres способност. Това става особено удобно, ако решите да използвате Postgres за вашия магазин за събития и искате да можете действително да виждате съдържанието на събитията. Тази публикация в блога например уточнява как да се справите с това. По-важното е, че този блог
публикацията показва как бихте могли например да коригирате използвания диалект. Може би това може да ви послужи при решения 2 и 3?
Вариант 4 в този случай трябва да бъде най-логичното решение. Но от отговора ви разбирам, че не сте го накарали да работи в момента. Когато комбинирате Axon със Spring, SpringAxonAutoConfigurer (от който препращате registerAggregateBeanDefinitions метод от вярвам) автоматично ще проверява за конфигурируеми bean-ове на вашия Aggregate. Това се прави въз основа на полета, дефинирани в @Aggregate (т.е. стереотипната анотация на Axon's Spring). По-конкретно, можете да използвате repository поле в @Aggregate за да дефинирате името на компонента на хранилището, което искате да използвате.
Следователно трябва просто да можете да предоставите GenericJpaRepository bean с желания identifierConverter . След това името на този компонент може да бъде указано в @Aggregate анотация във вашия MyAggregate , така че автоматичната конфигурация на Axon да може да го вземе правилно. Надявам се това да ви помогне!