【发布时间】:2019-02-28 22:19:50
【问题描述】:
我想在数据库中查询不是主键的给定 UUID。我无法使其工作:
这是我的 Node 类。我的 PK 是一个长的自动增量,我有一个名为 uuid 的字段,用于存储在数据库中保存新节点时生成的 UUID 键。
更新:即使我通过 id 获得一个节点,然后我使用它的节点 uuid 调用 findByUuid 函数,我得到一个空值
Node n = nodeService.getNodeByNodeId(1L);
return nodeService.getNodeByNodeUuid(n.getApiKey());
节点
@Entity
@Table(name="node")
public class Node {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "node_seq")
@SequenceGenerator(name = "node_seq", sequenceName = "node_seq", allocationSize = 1)
private Long id;
@Column(name = "uuid", updatable = false, nullable = false, unique=true)
private UUID uuid;
public UUID getUuid() {
return uuid;
}
public void setUuid(UUID uuid) {
this.uuid = uuid;
}
@Column(name = "NAME", length = 50, unique = true)
@NotNull
private String name;
@OneToMany(mappedBy="node", cascade=CascadeType.ALL)
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
控制器
@PreAuthorize("hasRole('MANAGER')")
@RequestMapping(value="/node/{nodeUuidString}", method = RequestMethod.GET)
public Node getNodeByUuid(@PathVariable UUID nodeUuidString) {
return nodeService.getNodeByNodeUuid(nodeUuidString);
}
我还将 nodeUuidString 作为字符串,然后转换为 UUID:
UUID nodeUuid = UUID.fromString(nodeUuidString);
但是没有用。
服务
public Node getNodeByNodeUuid(UUID nodeUuid) {
return nodeRepository.findOneByUuid(nodeUuid);
}
存储库
@Repository
public interface NodeRepository extends CrudRepository<Node, Long> {
Node findOneByUuid(UUID nodeUuid);
}
【问题讨论】:
-
显示节点类。而且当你说它不起作用时,你会发生什么异常?
-
我认为你不需要
findOneByUuid尝试将其更改为findByUuid -
我与
findByUuid和findOneByUuid的结果相同 -
不工作是什么意思?你有什么异常吗??
-
不,我只是得到一个空值。
标签: spring spring-data-jpa uuid