2017-03-01 19 views
0

私はSpring Boot + Hibernateを使用して書店の休憩APIを作成していますが、どのように進めるべきかわかりません。だから、最初にすべてのユーザーに作成される(DTOを使用すると、ここに掲載されていない)の:残りのapiでユーザーに顧客の詳細を追加

@Entity 
@Table(name = "app_user") 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "user_id", nullable = false, updatable = false, unique = true) 
    private Long id; 


    @Column(name = "email", nullable = false, unique = true) 
    private String email; 

    @Column(name = "password_hash", nullable = false) 
    private String passwordHash; 

    @OneToOne 
    @JoinColumn(name = "customer_id") 
    private Customer customer; 

    @Column(name = "role", nullable = false) 
    @Enumerated(EnumType.STRING) 
    private Role role; 

    // jpa requirement 
    public User() { 
    } 

    public Long getId() { 
    return id; 
    } 

    public void setId(Long id) { 
    this.id = id; 
    } 

    public String getEmail() { 
    return email; 
    } 

    public void setEmail(String email) { 
    this.email = email; 
    } 

    public String getPasswordHash() { 
    return passwordHash; 
    } 

    public void setPasswordHash(String passwordHash) { 
    this.passwordHash = passwordHash; 
    } 

    public Customer getCustomer() { 
    return customer; 
    } 

    public void setCustomer(Customer customer) { 
    this.customer = customer; 
    } 

    public Role getRole() { 
    return role; 
    } 

    public void setRole(Role role) { 
    this.role = role; 
    } 
} 

そして彼は、ログインして、彼が興味を持っている図書を検索することができますそして、彼がそれらを注文したい場合(JSON含むとPOSTを使用。彼の本)私の顧客のエンティティ(DTOを使用して)のように彼の詳細を入力する必要があります:

@Entity 
@Table(name = "customer") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "customer_id", nullable = false, updatable = false, unique = true) 
    private Long id; 

    @Column(name = "first_name", nullable = false) 
    private String firstName; 
    @Column(name = "last_name", nullable = false) 
    private String lastName; 
    @Column(name = "phone_number", nullable = false) 
    private String phoneNumber; 

    @ManyToOne 
    @JoinColumn(name = "address_id") 
    private Address address; 

    @OneToOne 
    @JoinColumn(name = "user_id") 
    private User user; 

    // jpa requirement 
    public Customer() { 
    } 

    public Long getId() { 
    return id; 
    } 

    public void setId(Long id) { 
    this.id = id; 
    } 

    public String getFirstName() { 
    return firstName; 
    } 

    public void setFirstName(String firstName) { 
    this.firstName = firstName; 
    } 

    public String getLastName() { 
    return lastName; 
    } 

    public void setLastName(String lastName) { 
    this.lastName = lastName; 
    } 

    public String getPhoneNumber() { 
    return phoneNumber; 
    } 

    public void setPhoneNumber(String phoneNumber) { 
    this.phoneNumber = phoneNumber; 
    } 

    public Address getAddress() { 
    return address; 
    } 

    public void setAddress(Address address) { 
    this.address = address; 
    } 

    public User getUser() { 
    return user; 
    } 

    public void setUser(User user) { 
    this.user = user; 
    } 

これは良いアプローチですか?私は他のどのように私は顧客と顧客をリンクすることができないのか分からない - >顧客は、ユーザーがjsut登録された男である間に注文を行うためのすべての詳細を持っているかもしれませんが、私の思考プロセスは大丈夫です。誰かがちょっと詳しく説明してくれますか?

EDIT: 明確にする:

  1. ユーザー登録とだけメールアドレスとパスワードた - POST @ /ユーザー

  2. ユーザーは、POST @ /ユーザー/ 1(番地なし)彼の顧客の詳細情報を追加/顧客:現在ログインしているユーザーが見つかりました - >顧客テーブルにcustomer_idを設定する(OneToOne接続)

  3. ユーザーは自分のアドレスの詳細をPOST @ users/1/customer/address: ER発見された - >顧客はCUSTOMER_IDによって発見され、その後、アドレスが追加されており、異なるのDTOを使用して

全3 ADDRESS_ID

を介して顧客にリンクされている - これは良いアプローチはありますか?

答えて

0

私はあなたのエンティティをモデルし直すことができると思います。

お客様は

お客様が本

は、デフォルトのプロパティを持つUserクラスを作成して購入するユーザーです。 Extend Userクラスを作成して追加フィールドを追加するには、Userクラスを拡張します。 Bookクラスを作成します。 BookクラスのArrayListを書籍としてCustomerクラスに追加します。

ユーザーがログインすると、既にユーザーの詳細があります。ユーザーの顧客オブジェクトを作成し、顧客として顧客が入力したときに追加の詳細を追加し、選択した書籍を顧客オブジェクトに追加し、顧客オブジェクトをDBに保存します。

関連する問題