У меня есть база данных PostgreSQL со столбцами, которые могут содержать нулевые значения. Если я использую режим разработки Quarkus или JVM, запрос возвращает (правильно) нулевые значения. Однако если я создаю собственный профиль с использованием GraalVM, он возвращает 0 для целого числа и 0,0 для числа с плавающей запятой (вместо нуля).
Во время многоэтапной сборки докера я использую расширение quarkus-resteasy-jsonb и следующее изображение: ИЗ quay.io/quarkus/ubi-quarkus-mandrel-builder-image:22.3-java17 Сборка AS ...
Что уже проверено:
Это может быть связано с этим: Числовой тип Quarkus (Integer, Float) возвращает 0 вместо нуля
Вот начало моего класса сущности:
@Entity
@Table(name = DBUtils.MY_TABLE_NAME, schema = DBUtils.SCHEMA_NAME)
@Getter
@Setter
public class MyClass extends PanacheEntityBase {
private static Logger technicalLogger = Logger.getLogger(LoggerNames.TECHNICAL.getName());
@Id
@GeneratedValue(generator = "myclassSequenceGenerator")
@SequenceGenerator(name = "myclassSequenceGenerator", sequenceName = "myclass_id_seq", allocationSize = 1)
@Column(name = "myclass_id", nullable = false)
public int myclassId;
@Column(name = "myclass_name", length = 50)
public String myclassName;
@Column(name = "street_length_m", length = 5)
public Integer lengthInMeters; // <= gives 0 if null in DB
@Column(name = "street_length_km", length = 5)
public Float lengthInKilometers; // <= gives 0.0 if null in DB
...
Любая помощь будет высоко оценен. Спасибо заранее!
Привет @ozkanpakdil, спасибо за ответ. На данный момент я добавил начало своего класса сущности
можешь ли ты попробовать без ломбока и еще один шаг, можешь ли ты попробовать с nullable правда, пожалуйста.
Да, я попробовал оба варианта, но, к сожалению, безуспешно. @Column(nullable=true/false)
предназначен для добавления ограничений (или отсутствия) в базу данных в процессе генерации. Есть еще идеи? Заранее большое спасибо!
При той же конфигурации, Jackson вместо Jsonb, с GraalVM с Java21, этой ошибки не происходит.
Если вы используете стратегию Active Record, Ломбок не нужен.
Есть открытая проблема https://github.com/oracle/graal/issues/5672
Я бы попробовал:
Большое спасибо Хуану за то, что помог мне. Я попробую ваши предложения одно за другим. Кстати, я использовал Quarkus 3.8.1, поэтому сегодня обновился до 3.10.2. Можете ли вы объяснить, зачем мне нужны реактивные версии этих расширений?
В [github.com/quarkusio/quarkus/wiki/… Руководство 2.8) объясняется, что RESTEasy Reactive по умолчанию. В [ github.com/quarkusio/quarkus/wiki/… Руководство 3.9) даны новые имена для этих зависимостей. Теперь, в версии 3.10, эти библиотеки являются реактивными, блокирующими и неблокирующими. Quarkus-rest и Quarkus-Rest-Jackson в предыдущих версиях назывались «реактивными».
Спасибо за информацию. Однако мне нужен @SessionScoped, который в настоящее время нельзя использовать с quarkus-rest, поэтому мне нужно остаться с «классическим» resteasy. В любом случае проблему можно решить благодаря обновлению до Java21 и удалению Lombok, большое спасибо!
Можете ли вы поделиться своим классом @Entity? или лучше небольшой репродуктор?