org.hibernate.MappingException:未知实体 - Hibernate、SpringBoot、DTO 模式
org.hibernate.MappingException: Unknown entity - Hibernate, SpringBoot, DTO pattern
我正在尝试使用 DAO
和 DTO
模式构建一个简单的 SpringBoot
和 Hibernate
应用程序。
我正在尝试将用户列表保存到数据库中。
当我使用 User
class 时它工作正常,但是当我尝试使用 DTO CreateUserDto
class 时我收到以下错误:
"Unknown entity: com.app.sportapp.dto.CreateUserDto; nested exception is org.hibernate.MappingException: Unknown entity: com.app.sportapp.dto.CreateUserDto"
存在 SingleTable
继承,其中 Player class
和 Coach class
继承 User class
。
User.java
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity(name = "Users")
@ApiModel(description = "All details about user")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "User_Type", discriminatorType= DiscriminatorType.STRING)
public class User implements Seriaalizable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
private String username;
private String email;
private String password;
private String contactNumber;
}
Player.java
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity(name = "Players")
@DiscriminatorValue(value = "player")
@DiscriminatorOptions(force=true)
public class Player extends User {...}
Coach.java
@Entity(name = "Coaches")
@DiscriminatorValue(value = "coach")
@DiscriminatorOptions(force=true)
public class Coach extends User{
}
这里是 DTO:
CreateUserDto.java
public class CreateUserDto {...}
PlayerDto.java
public class PlayerDto extends CreateUserDto{...}
CoachDto.java
public class CoachDto extends CreateUserDto{
}
因为我对 DAO
和 DTO
模式非常陌生,所以我假设它应该有一个名为 @Entity
的模型 CreateUser
与 DTO CreateUserDto
同名?或者我可以举个例子,我做了一个 User
模型并创建一个新的 CreateUserDto
吗?
谢谢!
错误发生是因为您将 DTO
视为一个实体。
从 DTOs
中删除 JPA 注释并且不要使用那些 类 连接到数据库。
您会将查询结果从实体转换为 DTO,反之亦然。
我还建议查看 Mapstruct 以了解 DTO 的创建。这可能会更容易将实体与 DTO 分开。
我正在尝试使用 DAO
和 DTO
模式构建一个简单的 SpringBoot
和 Hibernate
应用程序。
我正在尝试将用户列表保存到数据库中。
当我使用 User
class 时它工作正常,但是当我尝试使用 DTO CreateUserDto
class 时我收到以下错误:
"Unknown entity: com.app.sportapp.dto.CreateUserDto; nested exception is org.hibernate.MappingException: Unknown entity: com.app.sportapp.dto.CreateUserDto"
存在 SingleTable
继承,其中 Player class
和 Coach class
继承 User class
。
User.java
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity(name = "Users")
@ApiModel(description = "All details about user")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "User_Type", discriminatorType= DiscriminatorType.STRING)
public class User implements Seriaalizable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
private String username;
private String email;
private String password;
private String contactNumber;
}
Player.java
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
@Entity(name = "Players")
@DiscriminatorValue(value = "player")
@DiscriminatorOptions(force=true)
public class Player extends User {...}
Coach.java
@Entity(name = "Coaches")
@DiscriminatorValue(value = "coach")
@DiscriminatorOptions(force=true)
public class Coach extends User{
}
这里是 DTO:
CreateUserDto.java
public class CreateUserDto {...}
PlayerDto.java
public class PlayerDto extends CreateUserDto{...}
CoachDto.java
public class CoachDto extends CreateUserDto{
}
因为我对 DAO
和 DTO
模式非常陌生,所以我假设它应该有一个名为 @Entity
的模型 CreateUser
与 DTO CreateUserDto
同名?或者我可以举个例子,我做了一个 User
模型并创建一个新的 CreateUserDto
吗?
谢谢!
错误发生是因为您将 DTO
视为一个实体。
从 DTOs
中删除 JPA 注释并且不要使用那些 类 连接到数据库。
您会将查询结果从实体转换为 DTO,反之亦然。
我还建议查看 Mapstruct 以了解 DTO 的创建。这可能会更容易将实体与 DTO 分开。