Java 如何使用索引定义派生属性?

Java 如何使用索引定义派生属性?,java,mysql,hibernate,Java,Mysql,Hibernate,我在Hibernate4.2.1中使用mysql,我的应用程序是独立的。即没有弹簧等 我有以下课程: @Entity(name = "families") class Family { private String name; } @Entity(name = "persons") class Person { private Family family; private String name; } 我的问题是类person要有一个派生属性fullName, 构造为串联的

我在Hibernate4.2.1中使用mysql,我的应用程序是独立的。即没有弹簧等

我有以下课程:

@Entity(name = "families")
class Family {
   private String name;
}

@Entity(name = "persons")
class Person {
   private Family family;
   private String name;
}
我的问题是类person要有一个派生属性fullName, 构造为串联的family.name和this.name。另外,对于这个属性,最好有一个DB索引

我试过这样的方法,但没有成功

@Index(...)
@Column(insertable = false, updatable = false)
@Formula("family.name || ' ' || name")
private String fullName;
也就是说,我不明白我应该在@Index中写什么,以及@Formula的内容是什么。 你能帮帮我吗


谢谢。

@公式用于:

如果要在实体中应用虚拟属性以获得计算值,可以使用@Formula annotation设置公式。这个公式可以是我们想要的那么复杂

@Column(name="length")
    private int length;

    @Column(name="width") 
    private int width;

    @Formula(" length * width ")
    public long area;
用你自己的公式计算任何东西

@索引用于:

@索引在属性级别应用索引。如果实体的属性用@Index注释,则将在列上应用具有给定名称的索引

@Column(name="name")
    @Index(name="nameIndex")
    private String name;

我建议在类Person中添加新的临时属性。在get方法中,您可以根据需要连接(@Transient fullName;),例如,谢谢。仍然不明白我是如何称呼姓氏的;hibernate说这里有一个语法错误。