Честно казано, навлязохте доста дълбоко по въпроса тук @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 да може да го вземе правилно. Надявам се това да ви помогне!