gpt4 book ai didi

jpa - 如何在 Spring JPA 中设置外键列

转载 作者:行者123 更新时间:2023-12-05 05:27:37 27 4
gpt4 key购买 nike

我正在使用 Spring JPA 并希望将值设置为外键列。这是我的实体和存储库。


@Entity
public class Device {

@NotEmpty
@Id
private String deviceId;

@ManyToOne
@JoinColumn(name="userId", referencedColumnName="userId", insertable=false, updatable=false)
@NotFound(action=NotFoundAction.IGNORE)
private User user;

//Getters and setters
}

@Entity
public class User(){

@Id
private String userId;
private String userName;
//Getters and setters
}

public interface DeviceRepository extends PagingAndSortingRepository {

}

public class DeviceServiceImpl implements DeviceService {
@Autowired
private DeviceRepository devRepos;
@Autowired
private UserRepository userRepos;

@Override
public void saveDevice(Device device, String userId) {
User user = null;
if (userId!=null) {
user = userRepos.findOne(userid);
device.setUser(user);
}

deviceRepos.save(device);
}
}

用户存在于Device表中,但表中的userId列没有设置值。请帮助我解决问题。

编辑:我从注释中删除了 insertable 和 updatable,现在它可以工作了。@JoinColumn(name="userId", referencedColumnName="userId")

那么,这意味着我必须在每次保存设备时从用户表中获取设备的用户?

最佳答案

因为你设置了insertableupdatableDevice 类中的 user 属性设置为 false ,这将导致持久性提供程序忽略此列 (Device.userId) 在生成 SQL INSERT 和 UPDATE 语句时。

只需将它们更改为 true 或删除它们,因为它们的默认值已经是 true。


更新:

this means I have to get user of the device from the User table whenever I save a device?

在纯 JPA 中,如果您知道用户的 ID,则可以使用 EntityManager#getReference(User.class , aUserId)获取 User 实例而不实际从 DB 查询。但是在 Spring Data JPA 中,it seems that this method is not supported out of the box .

关于jpa - 如何在 Spring JPA 中设置外键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18524341/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com