У меня проблема, когда я не могу сохранить или слить объект, содержащий только ID и коллекцию других объектов. Если я добавлю другое поле, он совершит транзакцию как обычно. Кроме того, если я изменю стратегию генерации ID на AUTO, она также будет работать.Как сохранить объект, который содержит только коллекцию и идентификатор?
Остальная часть моей команды использует «IDENTITY» вместо «AUTO», поэтому я хочу быть в соответствии с ними. Их сущности - это больше, чем просто коллекция ID +, поэтому она отлично подходит для них. Ниже то, что я хочу, чтобы сделать работу:
@Entity
public class Filter implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, cascade = { CascadeType.ALL })
private ArrayList<Rule> rules = new ArrayList<>();
public Filter() {
}
}
ErrorMessage:
org.apache.openjpa.persistence.PersistenceException: ERROR: syntax error at or near ")"
Position: 25 {prepstmnt 693640431 INSERT INTO Filter() VALUES()} [code=0, state=42601]
FailedObject: [email protected]
По существу, так как это просто ID и Join Table, он умирает при попытке упорствовать или объединить фильтр без каких-либо полей.
Обходные
Изменение GenerationType.IDENTITY в GenerationType.AUTO.
-The только жулик, кажется, что первый запуск первичных ключей прыгать на 50, то он начинает приращением на 1.
Изменение GenerationType в таблице
-Этот, кажется, что AUTO выбрал.
Добавить произвольное поле в объект (т. Е. Тест строки = «тест»).
-Просто заставляя сущность иметь еще одно поле, оно сохраняется. Однако я не нуждаюсь в этом поле; Мне просто нужна коллекция
Сделать отношения двунаправленными.
-Выставляя отношения двунаправленным, таблицы возвращаются id (вместо того, чтобы просто быть id). Это работает только потому, что Filter принадлежит другой записи.
Если ваш поставщик JPA не поддерживает инструкции INSERT без столбцов, тогда поднимите BUG на нем. Я делаю это с поставщиком, который я использую (DataNucleus), и он генерирует правильный SQL. –
Использование AUTO на самом деле не является ответом, поскольку AUTO означает предоставление ему провайдеру какой стратегии использовать, и они могут просто использовать IDENTITY под обложками, которые заканчиваются той же проблемой. –
Убрано из автора – garfield