私は2つのエンティティクラスを持っています。ユーザーとFriendStatus.Friendステータスは、別のユーザーからのフレンドリクエストに関するデータを保持します。hibernate @onetomany双方向マッピングでデータが正しくマッピングされない
ユーザー:
@Entity
@Table(name = "USERS")
@XmlRootElement
public class User implements Serializable {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "acceptor")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Message> acceptedMessages;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "sender")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Message> sentMessages;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
@Column(name = "phone_number")
private String phoneNumber;
@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
private List<User> friends;
@OneToMany(cascade = CascadeType.ALL,mappedBy="requestAcceptor")
@LazyCollection(LazyCollectionOption.FALSE)
@JsonIgnoreProperties("requestAcceptor")
private List<FriendStatus> acceptedFriendRequests;
@OneToMany(cascade = CascadeType.ALL,mappedBy = "requestSender")
@LazyCollection(LazyCollectionOption.FALSE)
@JsonIgnoreProperties("requestSender")
private List<FriendStatus> sentFriendRequests;
@Column(name = "profile_status")
private String profileStatus;
@Enumerated(EnumType.STRING)
@Column(name = "activation_status")
private UserActivationStatus activationStatus;
FriendStatus:
@Entity
@Table(name="FRIEND_STATUS")
public class FriendStatus implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long Id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="request_sender_id")
@JsonIgnoreProperties("sentFriendRequests")
private User requestSender;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="request_acceptor_id")
@JsonIgnoreProperties("acceptedFriendRequests")
private User requestAcceptor;
@Enumerated(EnumType.STRING)
@Column(name = "request_status")
private FriendRequestStatus friendRequestStatus;
すると私は同じrequestAcceptorオブジェクトで2回目のオブジェクトを保存するとき、それはfine.Butの作品データベースへFriendStatusオブジェクトの保存初めて、休止状態request_acceptor_id列から前のIDを削除し、新しい行に書き込みます。私にお願いします。
EDIT:
これは私のオブジェクトをdbに保存する方法です。
public T create(T object) {
T objectFromDB = object;
Session session = NewHibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = (Transaction) session.beginTransaction();
session.save(object);
transaction.commit();
} catch (HibernateException e) {
if (session != null){
session.getTransaction().rollback();
}
e.printStackTrace();
} finally {
session.close();
}
return objectFromDB;
}
これは私がメソッドを作成して呼び出す方法です:
public void sendFriendRequest(FriendStatus object) {
FriendStatus status = fDao.create(object);//fDao is the object from Dao class which includes create method.
}
これは私のコントローラです:
@RequestMapping(value="/sendFriendRequest",method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON,produces = MediaType.APPLICATION_JSON)
public String sendFriendRequest(@RequestBody FriendStatus status) {
serviceUser.sendFriendRequest(status);//serviceUser is the object from class that includes sendFriendRequest method.
return "OK";
}
これはデシベルで私のテーブルです:
+====+================+=====================+===================+
| id | request_status | request_acceptor_id | request_sender_id |
+====+================+=====================+===================+
| 18 | WAITING | NULL | 29 |
+----+----------------+---------------------+-------------------+
| 19 | WAITING | 23 | 30 |
+----+----------------+---------------------+-------------------+
FriendStatusオブジェクトを保存すると(fr om client)のIDが29で、IDが23のrequestAcceptorオブジェクトがhibernateによってID 18のカラムに保存されます。その後、IDが30のrequestSenderで2番目のFriendStatusオブジェクトを保存し、idが23のrequestAcceptorオブジェクトを保存すると、 request_acceptor_idを、IDが18の行のNULLに置き換え、次にrequest_acceptor_idが23.butである新しい行をデータベースに作成します.2番目のオブジェクトを追加すると、最初のオブジェクトは変更されません。request_acceptor_idを同じrequest_acceptor_idで新しい列を作成するとNULLになります。あなたのカスケード設定を行うには
そうでないあなただけのコレクションからのカスケードルールを削除することができ@OneToMany、Cascade.All
のポイントだったと思います代わりに。 –
私は質問を編集しました。私は何かを加えるべきかどうかを言ってください。 –
私は既に言っています:あなたのコードを投稿し、それが何をするのか、それが何をするのかを明確に説明してください。 –