Установка даты создания сущности. Как изменить формат?

Здравствуйте.
Jmix version: 2.1.2

Если я создаю сущность вручную через dataManager, то я должен сам установить дату создания и пользователя(если я правильно понимаю).

box.setCreatedBy(user.getUsername());//кто добавил ящик
box.setCreatedDate(OffsetDateTime.now()); //когда добавили ящик

При этом получаю на форме дату в виде “02/02/2024 11:23 +0300”, а стандартно создаваемые jmix сущности имеют вид даты создания “02.02.2024 12:08”. Как мне использовать единый (такой как при стандартном создании сущности) формат?

Если вы используете Черты Audit, то самостоятельно их проставлять не нужно.

Если не audit. Может брать дату из бина TimeSource

Черта Аудит установлена, но что странно если сохраняю созданную сущность через dataManager.save(entity), то имя пользователя и дата создания сохраняются автоматически.
А если создаю сущность и затем сохраняю ее через dataContext.save(), например так:

Boxes box = dataManager.create(Boxes.class);
box.setDecNo(“1234”);
box.setColor(“зеленый”);
box.setZipProject(zipProjectDc.getItem());//привязываем к данному ЗИП проекту
boxesForZipProjectDc.getMutableItems().add(box);
dataContext.save();

то сущность появляется в таблице на форме, сохраняется, но без пользователя и даты создания.
Это ошибка или я что-то неправильно делаю?

Они в бд без юзера и даты?

Да, без юзера и даты в БД и в инспекторе сущностей. И вот еще что заметил (возможно я неправильно понимаю работу dataContext):

  1. Если работать с возвращенной сущностью из
    Boxes boxMerged = dataContext.merge(box);
    boxesForZipProjectDc.getMutableItems().add(boxMerged);
    то при дальнейшем dataContext.save() сущность сохраняется правильно-с автоматически проставленным пользователем и датой.
  2. Такой еще вопрос-если у меня в xml есть сущность(InstanceContainer) и связанные с ней сущности(CollectionContainer) и все прописано через fetch планы, то они автоматически должны попасть и отслеживаться dataContext, так ведь? То есть merge для вновь создаваемой сущности из коллекции не надо делать?

Я не сильно разбирался в том как работает сам dataContext, вопрос почему у вас box до этого сохранялся без dataContext.merge

Вопрос в том как вы создаете эту новую сущность, если самостоятельно в коде, то нужно для нее вызвать merge

В DataContext performSave можно увидеть, что когда сущность сохраняться в родительский dataContext (то есть когда вы в родительскую сущность добавляете или редактируете подсущность при помощи ее экрана) она автоматом мерджится в dataContext экрана родительской сущности.

Object merged = parentContext.merge(entity);
parentContext.getModifiedInstances().add(merged);

Спасибо большое за помощь.
Ради интереса сделал простой проект: Полки и книги(связанная сущность, один ко многим), включен аудит, два кнопки-одна сохраняет сущность без даты создания и пользователя(неправильно), другая сохраняет правильно. Это видно в инспекторе сущностей.
AuditNotWorking.zip (3.8 МБ)

Почему так я не совсем понимаю. Я считал, что если сущность отслеживается dataContext, то должна сохраняться с аудитом.
Может быть разработчикам пригодиться, может это баг а может фича.

У меня ваш код не работает. При попытке создать новую полку и добавить новую книгу по addBookBtn падает ошибка:

IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: com.company.auditnotworking.entity.Book-5c6b945f-a134-85e9-f512-c46f503c1e70 [new].

Да, я удалил кнопку создать и не продумал одновременное создание полки и книги.
Попробуйте просто создать книги для уже созданной полки-я на этом делал акцент

В вашей созданной shelf1:
Вообще простановка полей происходит:
image

но что-то не так в org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork#cloneAndRegisterNewObject.

Там clone возвращается без проставленных полей. К сожалению моих знаний eclipse не хватает, чтоб понять что не так.

Для меня вообще шок что у вас в примере Book без мерджа в dataContext сохраняется.

Завтра, выложу с работающей полкой.
По поводу сохранения Book без мерджа-тоже смущен)

AuditNotWorking.zip (3.9 МБ)

Сделал возможность сохранять Полку(shelf).
При этом заметил что:

  1. Если создавать полку и тут же добавлять книги то кнопка “Добавить книгу(с аудитом)” работает-то есть при нажатии затем кнопки Save сохраняется и полка и книга", а если нажать кнопку “Добавить книгу (без аудита)”, то при нажатии кнопки Save выскочит ошибка-я не разбирался в ее причинах.
  2. Меня больше интересует второй вариант-создаем полку, потом открываем ее на редактирование и добавляем книги “Добавить книгу(с аудитом)” и “Добавить книгу (без аудита)”, в одном случае сохраняется с датой и пользователем, в другом сохраняется без даты создания и пользователя(хотя у сущности есть черта Аудит). Мне кажется кнопка “Добавить книгу (без аудита)” либо вообще не должна сохранять либо сохранять со всеми полями.