我正在尝试开发一个Web应用程序,我想知道是否有一种方法可以利用外键而无需编写大量代码。
My Trainees.java
@Entity
public class Trainees {
@Id
@GeneratedValue
private int traineesID;
private int groupsID;
@ManyToOne
@JoinColumn(name = "status_trainee")
private String status_TraineeID;
private int customersID;
private String name;
private String surname;
private String phoneDetails;
private String email;
public Trainees(){
}
public Trainees(String name, String surname, String phoneDetails, String email, int id, int groupsID, String status_TraineeID, int customersID) {
super();
this.name = name;
this.surname = surname;
this.email = email;
this.phoneDetails = phoneDetails;
this.groupsID = groupsID;
this.status_TraineeID = status_TraineeID;
this.customersID = customersID;
}
//getters and setters
@Override
public boolean equals(Object object) {
if (object instanceof Trainees){
Trainees contact = (Trainees) object;
return contact.traineesID == traineesID;
}
return false;
}
@Override
public int hashCode() {
return traineesID;
}
}
Status_Trainee.java
@Entity
public class Status_Trainee {
@Id
@GeneratedValue
private int status_traineeID;
private String value;
public Status_Trainee(){
}
public Status_Trainee(String value, int id) {
super();
this.value = value;
}
//getters and setters
@Override
public boolean equals(Object object) {
if (object instanceof Status_Trainee){
Status_Trainee value = (Status_Trainee) object;
return value.status_traineeID == status_traineeID;
}
return false;
}
@Override
public int hashCode() {
return status_traineeID;
}
}
错误:由org.hibernate.AnnotationException引起:@OneToOne或uaiContacts.model.Trainees.status_TraineeID上的@ManyToOne引用了一个未知实体:String
所以我的目标是使用Trainees表和类,我可以使用外键检索Status_Trainee表的值。例如:如果外键ID为2,那么它将从status_trainee表中检索一个字符串,其中主键与外键ID匹配。
我正在使用模型,控制器,hibernate和angularjs来显示视图,我真的不想通过这一切传递表,我想使用类似ManyToOne或JoinColumns的东西会检索值?
感谢您的帮助!
答案 0 :(得分:1)
您应该在Trainee中添加对StatusTrainee的引用,并使用OneToMany,ManyToOne或OneToOne对其进行注释。根据您需要哪种关系,您需要StatusTrainee列表或只需要StatusTrainee。
提示:不要在类名中使用下划线。
答案 1 :(得分:1)
首先,不建议使用" _"在使用hibernate时在类名中。访问foreignKeys时,Hibernate使用下划线。所以让我们假设您将您的班级重命名为: TraineeStatus 并且ID将其更改为 traineeStatusId ..
其次,您可以根据需要使用Hibernate注释。但首先你需要知道这种关系是怎样的:
@OneToMany :一名受训者可以有很多状态
@ManytoOne :许多受训者可以拥有相同的身份
@OneToOne :一名受训者只能拥有一种状态,反之亦然。
试试这个:
@Entity 公共班级学员{
@Id
@GeneratedValue
private int traineesID;
private int groupsID;
@OneToOne
private TraineeStatus status;
private int customersID;
private String name;
private String surname;
private String phoneDetails;
private String email;
...
您可以根据需要更改@OneToOne ..
请记住,hibernate会尝试在你的Trainees mysql表中将它映射为status_traineeStatusId,所以如果你在trainess table中有这个列(作为一个整数),你就完成了:)..
就是这样.. 希望它有所帮助