私はREST-apiを介して新しいEmployee-entityをデータベースに追加しようとしています。 Employee-entityにはCityプロパティが含まれています。これはManyToOne関係です。新しい(従業員ではない)都市を持つ新しい従業員を挿入すると、正常に動作します。しかし、既存の都市の新しい従業員を追加すると、このエラーが発生します。CascadeType.ALLは子要素を更新しません
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1000' for key 'PRIMARY'
My CascadeTypeがALLに設定されています。 SAVE_UPDATEに変更すると、既存の都市で新しい従業員を挿入するとうまく動作しますが、新しい都市で新しい従業員を挿入すると機能しません。
従業員:
package be.pxl.backend.entity;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.hibernate.annotations.*;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name="Employees")
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int employee_id;
private String username;
private String password;
private String salt;
private String surName;
private String name;
private String street;
@Column(name="house_nr")
private String houseNr;
@ManyToOne
@Cascade (value={CascadeType.MERGE, CascadeType.PERSIST})
private City city;
private Date date_employment;
private String mobile_phone;
private String telephone_number;
private String email;
private String sex;
private Boolean status;
@OneToMany(mappedBy="employee")
private List<Login> logins;
@OneToMany(mappedBy = "employee")
private List<SensorUsage> usages ;
public List<Login> getLogins() {
return logins;
}
public Boolean getStatus() {
return status;
}
public int getEmployee_id() {
return employee_id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getSalt() {
return salt;
}
public String getSurName() {
return surName;
}
public String getName() {
return name;
}
public String getStreet() {
return street;
}
public String getHouseNr() {
return houseNr;
}
public City getCity() {
return city;
}
public Date getDate_employment() {
return date_employment;
}
public String getMobile_phone() {
return mobile_phone;
}
public String getTelephone_number() {
return telephone_number;
}
public String getEmail() {
return email;
}
public String getSex() {
return sex;
}
public void setStatus(boolean status) { this.status = status; }
}
市:
package be.pxl.backend.entity;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="Cities")
public class City {
@Id
private String postal_code;
private String city;
@OneToMany(mappedBy = "city")
private List<Destination> destinations;
@OneToMany(mappedBy = "city")
private List<Employee> employees;
public String getPostal_code() {
return postal_code;
}
public String getCity() {
return city;
}
}
私は存続する場所です:
package be.pxl.backend.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import be.pxl.backend.entity.*;
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
@Query("from Employee e where e.username = :username")
Employee getEmployeeByUsername(@Param("username")String username);
}
ヘルプをいただければ幸いです! @ManyToOne
アノテーションで、それに注釈を付ける、もちろん、あなたを
/所有エンティティ(外部キーを持つエンティティ):あなたがこれを行う必要があります一つの団体に双方向の多くを設定するために
あなたのコードを表示してください。 – davidxxx
@davidxxx done! –
従業員をどのように救いますか? –