就像标题上说的。我将实体存储在 MySql DB
使用 JPA
以及 Hibernate
. 我用的是 java.util.UUID
在java方面作为我的 @Id
. 在db端,主键是 binary(128)
. 坚持很好。没有错误。但是使用 UUID
当钥匙回来的时候 null
每一次。在数据库中查找用作 binary
似乎与 java.lang.String
代表 UUID
所以一切似乎都在顺利地被翻译。但就像我说的,当尝试检索时,测试无法确认检索。切换到我的另一个数据类型 @Id
因为我需要知道 id
甚至在坚持和 UUID
是获得唯一id而不必知道数据库状态的最佳方法。下面是我的实体类、失败的测试和我的模式定义。
架构定义:
create table PLAYER(
ID binary(128) PRIMARY KEY NOT NULL,
USERNAME VARCHAR(50) unique NOT NULL,
PASSWORD varchar(100) NOT NULL,
JOIN_DATE DATETIME);
``` `Player.java` ```
@Entity
@Table(name = "PLAYER")
public class Player extends AbstractEntity{
@Column(name = "USERNAME")
private String username;
@Column(name = "PASSWORD")
private String password;
@Column(name = "JOIN_DATE")
private LocalDate joinDate;
``` `AbstractEntity.java` ```
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
@Id
@Column(name = "ID")
protected UUID id;
最后,失败的测试
@Test
void findById() {
Player patrick = new Player();
patrick.setId(uuid);
patrick.setUsername("patrick");
patrick.setPassword("password");
patrick.setJoinDate(LocalDate.now());
playerRepo.save(patrick);
Optional<Player> result = playerRepo.findById(uuid);
if (result.isEmpty()) {
fail();
}
}
2条答案
按热度按时间a2mppw5e1#
可以将columndefinition属性添加到列注解
qhhrdooz2#
请尝试按以下方式更正测试用例: