2017-08-22 4 views
1

私のデータベース内の3つのテーブルに3つの@Entityクラスがマップされています。エンティティクラスは私のコードでトランザクションロールバックをサポートするmysqlの永続javaクラス

@Entity 
@Table(name = "gbi_user") 
public class UserModel { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "u_id") 
private Long id; 

@Column(name = "u_fname") 
private String firstName; 

@Column(name = "u_lname") 
private String lastName; 

//getters and setters 

} 

@Entity 
@Table(name = "gbi_reachable_address") 
public class AddressModel { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "ra_id") 
private Long id; 

@Column(name = "ra_city") 
private String city; 
@Column(name = "ra_zip") 
private Integer zip; 

// getters and setters 
} 

@Entity 
@Table(name = "gbi_user_to_address") 
public class UserToAddress { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "uta_id") 
private Long id; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "uta_frn_user_id", referencedColumnName = "u_id") 
private UserModel user; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "uta_frn_add_id", referencedColumnName = "ra_id") 
private AddressModel address; 
//getters and setters 
} 

あり、私が最初にJPAのsave()を使用してデータベースにUserModelクラスを保存しています。次に、データベースにクラスAddressModelを保存しています。最後に、UserToAddressクラスをデータベースに保存します。それは正常に動作しています。ただし、UserToAddressクラスを保存中に例外が発生した場合は、UserModelAddressModelがデータベースに保存されます。それを避ける方法は?

答えて

1

すべての永続化がトランザクションのコンテキスト内で行われるようにする必要があります。 Springを使用している場合は、Springのトランザクション管理に関するドキュメントをよくお読みください。具体的には@Transactional注釈を見てください。

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#transaction-intro

一般的なアプローチは、@Transactionalとして、あなたがそのトランザクションコンテキストを共有する必要があるすべてのエンティティを永続化するために必要なすべての作業を行うだろうという方法でマークされたメソッドで@Serviceクラスを持っていることであろう。

関連する問題