Tôi có lỗi này khi cố gắng liệt kê các đối tượng từ cơ sở dữ liệu với tiêu chuẩn Hibernate trang trí bằng Hạn chế đơn giản"IllegalArgumentException xảy ra gọi getter của" khi chạy tiêu chuẩn với SINGLE_TABLE chiến lược Inheritance
Criteria criteria = session.createCriteria(Licence.class);
criteria.add(Restrictions.eq("gym", gym.getId()));
List<Licence> list = criteria.list();
Tôi có hai lớp: Licence
trong đó có liên kết đến Gym
. Hai lớp học này đang mở rộng DataModel
để quản lý thông tin về phiên bản dữ liệu - (sáng tạo và biến đổi, ai và khi nào). Điều gì cũng quan trọng là hai lớp đó có @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
.
Giấy phép
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Licence extends DataModel implements Serializable {
private Gym gym;
private String licenceType;
private String keyCode;
private Date expireDate;
private ELicenceExpiry expired;
public Licence() {
}
@ManyToOne
@JoinColumn(name="gym_id")
public Gym getGym() {
return gym;
}
public void setGym(Gym gym) {
this.gym = gym;
}
@Column(name = "licence_type")
public String getLicenceType() {
return licenceType;
}
public void setLicenceType(String licenceType) {
this.licenceType = licenceType;
}
@Column(name = "key_code")
public String getKeyCode() {
return keyCode;
}
public void setKeyCode(String keyCode) {
this.keyCode = keyCode;
}
@Column(name = "expire_date")
public Date getExpireDate() {
return expireDate;
}
public void setExpireDate(Date expireDate) {
this.expireDate = expireDate;
}
@Column(name = "expired")
@Enumerated(EnumType.ORDINAL)
public ELicenceExpiry getExpired() {
return expired;
}
public void setExpired(ELicenceExpiry expired) {
this.expired = expired;
}
}
phòng tập thể dục
@Entity
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
public class Gym extends DataModel implements Serializable{
private String shortName;
private String name;
private String nip;
private String street;
private String postCode;
private String localization;
private String telephone;
public Gym(){};
@Column(name="short_name")
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNip() {
return nip;
}
public void setNip(String nip) {
this.nip = nip;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@Column(name="post_code")
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
public String getLocalization() {
return localization;
}
public void setLocalization(String localization) {
this.localization = localization;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
}
DataModel
@MappedSuperclass
public abstract class DataModel implements Serializable{
protected Long id;
protected String editor;
protected Date editDate;
protected Time editTime;
protected int dataState;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEditor() {
return editor;
}
public void setEditor(String editor) {
this.editor = editor;
}
@Column(name="edit_date")
public Date getEditDate() {
return editDate;
}
public void setEditDate(Date editDate) {
this.editDate = editDate;
}
@Column(name="edit_time")
public Time getEditTime() {
return editTime;
}
public void setEditTime(Time editTime) {
this.editTime = editTime;
}
@Column(name="data_state")
public int getDataState() {
return dataState;
}
public void setDataState(int dataState) {
this.dataState = dataState;
}
}
MySQL
CREATE TABLE licence(
id INT(5) NOT NULL AUTO_INCREMENT,
gym_id int(3),
licence_type VARCHAR(10),
key_code VARCHAR(10),
expire_date DATE,
expired INT(1),
editor VARCHAR(10),
edit_date DATE,
edit_time TIME,
data_state INT(1) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (gym_id) REFERENCES gym(id) ON DELETE SET NULL
);
CREATE TABLE gym(
id INT(3) NOT NULL AUTO_INCREMENT,
short_name VARCHAR(16) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
street VARCHAR(100),
post_code VARCHAR(6),
localization VARCHAR(64),
nip VARCHAR(13),
telephone VARCHAR(15),
editor VARCHAR(10),
edit_date DATE,
edit_time TIME,
data_state INT(1) NOT NULL,
PRIMARY KEY (id)
);
Ngoại lệ:
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of pl.fitpartner.model.DataModel.id
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:192)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:346)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4746)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4465)
(...)
Caused by: java.lang.IllegalArgumentException: [email protected]
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169)
... 28 more
Tôi đang làm gì sai?