2
ユーザーがSpring Securityによって認証され、adresフォームを記入したい場合、私は自動的に外部キー列 "adres_id"をユーザー内で更新したいと思います表。 テーブルに外部キーを設定する方法
ユーザー表:
ADRES私がどのようにsomethigこの
アドレステーブルのような最も一般的な方法
でこれを実装する方法をヒントを与えてください
@Entity
@Table(name="adres")
public class Adres {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
int id;
@Column(name="country", nullable=false)
private String country;
private String street;
private String postcode;
private String telephone;
private String pesel;
@OneToOne(mappedBy ="adres")
private User user;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPostcode() {
return postcode;
}
public void setPostcode(String postcode) {
this.postcode = postcode;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getPesel() {
return pesel;
}
public void setPesel(String pesel) {
this.pesel = pesel;
}
public String getStreet() {
return postcode;
}
public void setStreet(String street) {
this.street = street;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
ユーザ
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
int id;
@Column(name="username", nullable=false)
private String username;
private String password;
private String email;
private Boolean enabled;
@OneToOne(cascade = CascadeType.ALL)
private Adres adres;
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
AdresDAO
@Repository
@Transactional
public class AdresDAOImpl implements AdresDAO{
@Autowired
SessionFactory sessionFactory;
public void addAdres(Adres adres) {
sessionFactory.getCurrentSession().save(adres);
}
public List<Adres> listAdres() {
return sessionFactory.getCurrentSession().createQuery("from Adres order by id").list();
}
public void removeAdres(int id) {
Adres adres = (Adres) sessionFactory.getCurrentSession().load(
Adres.class, id);
if (null != adres) {
sessionFactory.getCurrentSession().delete(adres);
}
}
public Adres getAdres(int id) {
return (Adres)sessionFactory.getCurrentSession().get(Adres.class, id);
}
public void editAdres(Adres adres) {
sessionFactory.getCurrentSession().update(adres);
}
}
AdresService
@Service
public class AdresServiceImpl implements AdresService{
@Autowired
AdresDAO adresDAO;
@Transactional
public void addAdres(Adres adres) {
adresDAO.addAdres(adres);
}
@Transactional
public void editAdres(Adres adres) {
adresDAO.editAdres(adres);
}
@Transactional
public List<Adres> listAdres() {
return adresDAO.listAdres();
}
@Transactional
public void removeAdres(int id) {
adresDAO.removeAdres(id);
}
@Transactional
public Adres getAdres(int id) {
return adresDAO.getAdres(id);
}
}
あなたは私を見るように私はそれを設計したが、それはまだ私の問題を解決しません。私はアドレスオブジェクトを塗りつぶすと "アドレス"テーブルにデータが読み込まれ、 "User"テーブルに外部キーHOME_ADDRESS_IDがありますが、値はありません。 "Address"テーブルの "id"と "User"テーブルの "HOME_ADDRESS_ID"の同じ値を持っています。どのようにそれを実装する? – luafanti
まずアドレスを保存し、このアドレスをuser.setAddress(mySavedNewAddress)のようなユーザーのアドレスに設定すると、ユーザーのテーブルにアドレスIDが表示されます。 – ismail
実際にjpaが動作した後は、アドレスオブジェクトのIDは自動的に更新されますが、この操作後に新しく作成されたアドレスにIDが設定されていることを確認してください。 – ismail