Я пытаюсь отобразить таблицу, в которой есть составной-идентификатор , используя Hibernate.У меня есть файл сопоставления, класс сущности, который отображает эту таблицу, и IdClass, который необходим для сериализации составного идентификатора.Но я получаю IllegalArgumentException: expecting IdClass mapping
ошибку.Вот файл сопоставления:
<hibernate-mapping>
<class name="database.PermissionsEntity" table="Permissions" schema="interapp">
<composite-id mapped="true" class="database.PermissionsEntityPK">
<key-property name="id">
<column name="id" sql-type="int(11)"/>
</key-property>
<key-property name="level">
<column name="level" sql-type="char(1)" length="1"/>
</key-property>
</composite-id>
</class>
</hibernate-mapping>
Это класс Entity, который я написал:
@Entity
@Table(name = "Permissions", schema = "interapp", catalog = "")
@IdClass(PermissionsEntityPK.class)
public class PermissionsEntity {
@Id
private int id;
@Id
private String level;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PermissionsEntity that = (PermissionsEntity) o;
if (id != that.id) return false;
if (level != null ? !level.equals(that.level) : that.level != null) return false;
return true;
}
@Override
public int hashCode() {
int result = id;
result = 31 * result + (level != null ? level.hashCode() : 0);
return result;
}
}
Я использую следующий IdClass:
public class PermissionsEntityPK implements Serializable {
private int id;
private String level;
public PermissionsEntityPK(int id, String level) {
this.id = id;
this.level = level;
}
public PermissionsEntityPK() {
}
@Column(name = "id", nullable = false)
@Id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "level", nullable = false, length = 1)
@Id
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PermissionsEntityPK that = (PermissionsEntityPK) o;
if (id != that.id) return false;
if (level != null ? !level.equals(that.level) : that.level != null) return false;
return true;
}
@Override
public int hashCode() {
int result = id;
result = 31 * result + (level != null ? level.hashCode() : 0);
return result;
}
}
Я думаю, что может быть какое-то @Id
неправильное место, но я не могу понять, где.Что мне здесь не хватает?