我是Spring / JPA的新手,我正在尝试使用数据库关系@annotations简化我的代码。
我有两个实体,一个用户实体和一个令牌实体。 在用户上调用setToken()时,我希望Token覆盖表中与该用户相关联的所有旧令牌。
目前,新令牌(通过user.setToken())正在插入,而不是更新。
我该如何实现这种关系?在“ Lame-mans”中...用户甚至只能拥有一个令牌,并且可以随时被赋予另一个令牌,而丢弃旧令牌。 这些模型中有一些多余的字段,为了清楚起见,我将其截短。
@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;
答案 0 :(得分:1)
如果您的$route='http://localhost:8000/api/devices';
try {
$device= new Client();
$answer= $client->request('GET', $answer);
$body = $answer->getBody();
$status = 'true';
$message = 'Data found!';
$final= json_decode($body);
foreach ($finala $res) {
$id = $res->clientId;
}
echo $id;
只有1个字段, REFRESH_TOKEN_ID 很长。为什么需要为此使用不同的表。您可以拥有这样的东西
RefreshToken
调用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;
...
时,您必须设置任何值。如果是的话。您的逻辑会很好,
如果否,您总是可以根据当前时间或其他方式在Java中生成唯一值。
或
如果要继续使用相同的模式,请使用setToken()
orphanRemoval = true
答案 1 :(得分:0)
您永远不应修改实体的主键
这是不可能的,因为您更改了令牌的ID。您需要在RefreshToken中创建一个唯一的ID,并在保存后保持不变。
如果您确实需要-最好删除该实体并创建一个新实体,该实体只是复制旧实体,但要使用新的主键。