我刚刚开始玩hibernate搜索。 如何解决以下问题。
从超类继承的所有java实体:
@SuppressWarnings("rawtypes")
@MappedSuperclass
@Indexed
public abstract class BaseEntity{
private Integer id;
private Integer jpaVersion;
private Date creaDate;
private Date modDate;
private String creaUser;
private String modUser;
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
.....
例如,我必须(还有更多)子类:
@Entity
@Indexed
@Table(name = "BASE_PERSON", schema = "MYSCHEMA")
public class Person extends extends BaseEntity{
private String firstName;
private String lastName;
....
....
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
@Column(name = "LASTNAME", nullable = false, length = 50)
@NotNull
@Size(max=50)
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
@Column(name = "FIRSTNAME", length = 50)
@Size(max=50)
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
和第二个:
@Entity
@Indexed
@Table(name = "BASE_USER", schema = "MYSCHEMA")
public class User extends extends BaseEntity{
private String userName;
....
....
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
@Column(name = "USERNAME", nullable = false, length = 50)
@NotNull
@Size(max=50)
public String getUserName() {
return this.userName;
}
public void setUserName(String lastName) {
this.UserName = UserName;
}
....
运行创建整个索引的代码后,我得到了三个索引。超出我的预期。索引是:BaseEntity,Person和User。 但所有Persons和Useres都存储在索引BaseEntity中,而不是存储在它们自己的索引中。 有没有办法改变这一点,以便所有人都在索引人中,所有用户都在索引用户中?
或者这是hibernate搜索的常见行为吗?
谢谢和问候 LStrike
答案 0 :(得分:4)
您需要从@Indexed
中删除BaseEntity
,您只需要在子类上进行注释。您仍然可以使用BaseEntity
在@Field
中注释属性,使它们出现在子类索引中。