Mat*_*ski 4 orm hibernate spring-data-jpa spring-boot
我正在尝试创建简单的单向映射。我正在使用 MappedSuperclass 和 @JoinColumn ,可能有问题。看起来实体无法从超类中找到 id 字段。
例外:
Caused by: org.hibernate.MappingException: Unable to find column with logical name: user_details_id in org.hibernate.mapping.Table(user_details) and its related supertables and secondary tables
at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:832) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:256) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:101) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1827) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1771) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1658) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:287) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:904) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:935) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
Run Code Online (Sandbox Code Playgroud)
超级类:
@Getter
@Setter
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(
strategy = GenerationType.IDENTITY
)
private Long id;
}
Run Code Online (Sandbox Code Playgroud)
消息实体(连接发送者和接收者的 ID)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "Message")
@Table(name = "message")
public class Message extends BaseEntity {
private String title;
private String details;
private String message_container;
private LocalDate dataOfSending;
@ManyToOne(optional = false)
@JoinColumn(name = "sender_id", referencedColumnName = "user_details_id")
private UserDetails sender;
@ManyToOne(optional = false)
@JoinColumn(name = "receiver_id", referencedColumnName = "user_details_id")
private UserDetails receiver;
}
Run Code Online (Sandbox Code Playgroud)
用户详细信息(不应该知道消息)
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "UserDetails")
@Table(name = "user_details")
public class UserDetails extends BaseEntity {
private String firstName;
private String lastName;
private String motherName;
private String fatherName;
private String personalIdentityNum;
private LocalDate dateOfBirth;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
@OneToOne(mappedBy = "userDetails")
private Address address;
@OneToOne(mappedBy = "userDetails")
private Contact contact;
@OneToOne(mappedBy = "userDetails")
private ProfileImage profileImage;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?先感谢您。
Message
你可以在课堂上更改这一部分吗
@ManyToOne(optional = false)
@JoinColumn(name = "sender_id", referencedColumnName = "user_details_id")
private UserDetails sender;
@ManyToOne(optional = false)
@JoinColumn(name = "receiver_id", referencedColumnName = "user_details_id")
private UserDetails receiver;
Run Code Online (Sandbox Code Playgroud)
到
@ManyToOne
@JoinColumn(name = "sender_id")
private UserDetails sender;
@ManyToOne
@JoinColumn(name = "receiver_id")
private UserDetails receiver;
Run Code Online (Sandbox Code Playgroud)
并UserDetails
添加这些代码
@OneToMany(mappedBy = "sender")
private List<Message> senderMessage = new ArrayList<>();
@OneToMany(mappedBy = "receiver")
private List<Message> receiverMessage = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9161 次 |
最近记录: |