Ну, я не думаю, что это сработает. JPA автоматически генерирует ваше значение id и отвечает за @GeneratedValue
. Спросите себя: «Что произойдет, если уже существует существующий объект с идентификатором 100. И я создаю вручную новый объект с идентификатором 100». Интуитивно я бы сказал, что JPA (или реализация) выдает искушение.
При написании выше ответ, который я получил идею написания собственного генератора (не пробовал на всех, просто закодированы здесь на StackOverflow.
Вы можете передать свою собственную реализацию генератора к @GeneratedValue
аннотацию
@Id
@GeneratedValue(startegy = GenerationType.IDENTITY, generator="generatedIdOrCustomId")
@GenericGenerator(name="generatedIdOrCustomId", strategy="GeneratedIdOrCustomId")
private Long id;
...
И обычай реализация должна выглядеть следующим образом:
public class GeneratedIdOrCustomId extends IdentityGenerator {
@Override
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
if (((YourEntity) obj).getId() == null) {
// the id is null, let JPA create an id.
return super.generate(session, obj);
} else {
// the id is set and should not be generated by JPA.
return ((YourEntity) obj).getId();
}
}
генерировать м Этод - это простое и грязное воплощение. Вам нужно будет проверить, например, также, если obj == null
и бросить (Hibernate)Exception
в этом случае.
Пожалуйста, объясните, как «длинное» поле может быть «не установлено»? Если бы это был Длинный, тогда я мог бы понять, но недолго. –