私はSpring / JPAを初めて使用し、データベース関係@annotationsを使用してコードを単純化しようとしています。
ユーザーエンティティとトークンエンティティの2つのエンティティがあります。ユーザーでsetToken()が呼び出されたときに、テーブル内のユーザーに関連付けられている古いトークンをトークンで上書きする必要があります。
現時点では、(user.setToken()を介した)新しいトークンはUPDATEではなくINSERTになっています。
この関係を実現するにはどうすればよいですか?「Lame-mans」では...ユーザーはトークンを1つしか持つことができず、いつでも別のトークンを与えることができ、古いものを破棄します。これらのモデルには、わかりやすくするために切り捨てた追加のフィールドがあります。
@Entity
@Table(name = "Users")
public class User {
@Column(name = "USER_ID")
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long userId;
@OneToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "REFRESH_TOKEN_ID")
private RefreshToken refreshToken;
...setters and getters
そしてトークンのコード:
@Entity
@Table(name = "RefreshTokens")
public class RefreshToken {
@Column(name = "REFRESH_TOKEN_ID")
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long tokenId;
長いRefreshToken
フィールドREFRESH_TOKEN_IDが1つしかない場合。これに別のテーブルが必要な理由。あなたはこのようなものを持つことができます
public class User {
@Column(name = "USER_ID")
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long userId;
@Column(name = "REFRESH_TOKEN_ID")
private Long refreshToken;
...
setToken()
が呼び出されたときは、任意の値を設定する必要があります。はいの場合はそれです。あなたのロジックはうまく機能します、
いいえの場合は、現在の時刻などに基づいてJavaで常に一意の値を生成できます。
または
同じパターンを使い続けたい場合 orphanRemoval = true
@OneToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "REFRESH_TOKEN_ID")
private RefreshToken refreshToken;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加