【发布时间】:2018-02-16 15:46:13
【问题描述】:
我有两个实体类,每个用于我的表。它们都是 OneToOne-Mapped。当我读取数据时,总是将另一个表的值设为空。
这些是我的 SQL
CREATE TABLE driver_master (
unique_driver_id VARCHAR(60) PRIMARY KEY,
driver_name TEXT,
mobile_number VARCHAR (20),
vehicle_number TEXT,
vehicle_make TEXT,
seating_capacity INTEGER (10),
creation_time DATETIME
)
CREATE TABLE user_master (
user_id MEDIUMINT AUTO_INCREMENT PRIMARY KEY,
user_name TEXT,
password VARCHAR (20),
unique_driver_id VARCHAR(60),
FOREIGN KEY (unique_driver_id) REFERENCES driver_master(unique_driver_id)
)
这些是我的实体类
DriverMaster.java
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "driver_master")
public class DriverMaster {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "unique_driver_id")
UUID id;
@Column(name = "driver_name")
String driverName;
@Column(name = "mobile_number")
String mobileNumber;
@Column(name = "vehicle_number")
String vehicleNumber;
@Column(name = "vehicle_make")
String vehicleMake;
@Column(name = "seating_capacity")
Integer seatingCapacity;
@Column(name = "creation_time")
OffsetDateTime creationTime;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "driverMaster")
UserMaster userMaster;
}
UserMaster.java
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "user_master")
public class UserMaster {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
Long id;
@Column(name = "user_name")
String userName;
@Column(name = "password")
String password;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "unique_driver_id", nullable = false)
DriverMaster driverMaster;
}
这是我的 DriverMasterRepository
public interface DriverMasterRepository extends CrudRepository<DriverMaster, Long> {
DriverMaster findById(UUID id);
}
这是我的 UserMasterRepository
public interface UserMasterRepository extends CrudRepository<UserMaster, Long> {
UserMaster findById(Long id);
}
我正在同时创建 DriverMaster 和 UserMaster。下面的代码片段
public DriverMaster create() {
UserMaster userMaster = UserMaster.builder()
.userName("xxxxx")
.password("xxxx").build();
DriverMaster driverMaster = DriverMaster.builder().driverName("TestDriver")
.creationTime(ZonedDateTime.now().toOffsetDateTime())
.seatingCapacity(8)
.mobileNumber("xxxxxxx")
.vehicleNumber("xxxx")
.vehicleMake("xxxx")
.userMaster(userMaster)
.build();
return driverUserService.create(driverMaster);
}
当我访问每个存储库并获取数据时,该特定表的数据将被填充,而引用的对象始终为 Null。
创建 DriverMaster 后,我无法在 DriverMaster 中获取 UserMaster,它总是以 null 的形式出现。
下面的 REST 响应显示 DriverMaster 中的 UserMaster 将作为 Null 出现
{
"id": "0d97073b-6ae2-47a9-b751-0313fd9e8ba2",
"driverName": "TestDriver",
"mobileNumber": "11111",
"vehicleNumber": "111",
"vehicleMake": "figo",
"seatingCapacity": 8,
"creationTime": "2018-02-16T15:56:50.331Z",
"userMaster": null
}
【问题讨论】:
-
上述输出有什么问题。没错
-
当我做
userMaster.getDriverMaster或相反时,我只得到空值。不是价值 -
在您上面显示的响应中,userMaster 不为空。你在说什么
-
现在编辑了 REST 响应
标签: spring hibernate spring-boot spring-data-jpa