Spring data save

267
24 ноября 2017, 07:04

Сущности

Acc

@Entity
@JsonIgnoreProperties({"remoteId", "owner"})
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"uuid", "locale_id"}))
public class Acc extends SynchronizedEntity implements Limit.OwnerOfLimit {
private Long mId;
@ManyToOne
@JsonProperty("owner")
private User mOwner;
@JsonProperty("userId")
private String mUserId;
@JsonProperty("name")
private String mName;
@JsonProperty("cur")
@ManyToOne(cascade = CascadeType.ALL)
private Cur mCur;
@JsonProperty("accType")
@ManyToOne(cascade = CascadeType.ALL)
private AccType mAccType;
@JsonProperty("colorId")
private String mColorId;
@JsonProperty("rest")
private Float mRest;
@JsonProperty("order")
private Long mOrder;
@JsonProperty("limitOwner")
private String limitOwner;

Cur

@Entity
@Immutable
public class Cur extends BaseEntity {
    @JsonProperty("iso")
    private String mIso;
    @JsonProperty("name")
    private String mName;
    @JsonProperty("use")
    private String mUse = "N";
}

AccType

@Entity
@Immutable
public class AccType extends BaseEntity {
    @JsonProperty("name")
    private String mName;
    @JsonProperty("ap")
    private short mAp;
    @JsonProperty("iconid")
    private String mIconid;
}

REST сервер (Spring) обрабатывает запрос с объектом Acc и выполняет действие сохранение, обновления, помечает на удаление. Я захотел сделать так, чтобы таблицы cur и AccType были справочниками (так-как в AccType всего 3 поля,а в Cur 160). Но теперь, когда я пытаюсь сохранить свежеприсланный обьект в бд через его DAO обычным методом save у меня вылетает ошибка , а именно

org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement Caused by: org.postgresql.util.PSQLException: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "cur_pkey" Подробности: Ключ "(id)=(2)" уже существует.

Как я понимаю hibernate пытается записать обьект в табличку cur и естественно не может это сделать, так как поле уже занято. НО суть в том, что он не должен создавать поле, а должен находить уже созданное в справочнике поле и в Acc добавлять его.

Есть ли какая-нибудь аннотация, которая запрещает запись и говорит ,что нужно искать по таким данных поле, а не создавать

READ ALSO
Java. Считать строки из файла

Java. Считать строки из файла

ЗдравствуйтеПомогите, пожалуйста

299
Разбор условия if(?:) return;

Разбор условия if(?:) return;

Подскажите пожалуйста, как можно озвучить данное условие if()

207
Многоразовый вызов метода потоком

Многоразовый вызов метода потоком

В процессе изучения многопоточности JAVA возник вопрос:

211