Java 如何使用JPA2和HBN maven插件创建hibernate友好的MySQL数据库字段?

Java 如何使用JPA2和HBN maven插件创建hibernate友好的MySQL数据库字段?,java,hibernate,maven,jpa,Java,Hibernate,Maven,Jpa,是否有任何方法可以使用JPA或hibernate注释来指定数据库中字段的确切类型和长度(根据MySQL) 例如: @Entity @Table { appliesTo="test" } public class Test implements Serializable { private string info; public void setInfo(String i) { info = i; } @Column { name="id", l

是否有任何方法可以使用JPA或hibernate注释来指定数据库中字段的确切类型和长度(根据MySQL)

例如:

@Entity
@Table { appliesTo="test" }
public class Test implements Serializable {

    private string info;

    public void setInfo(String i) {
       info = i;
    }

    @Column { name="id", length="25" }
    public String getInfo() {
        return info;
    }
}
我想使用hibernate maven插件对这个类进行反向工程,我想在@Column注释中添加“varchar 35”或其他内容,以便在进行反向工程时,按照我指定的长度创建字段

另外,在java字段(如private long age)上使用“Column”注释与getter方法(我通常看到的方法)之间有什么区别?

是的。列注释中的属性就是为了满足这种需要。如果不需要对生成的SQLDDL进行如此详细的控制,那么长度、精度和比例属性将非常有用

您不应该将持久性注释同时扩展到字段和方法。只要它们一直放置,就可以了。提供的持久性(如Hibernate)选择是否使用字段或方法根据注释所在的位置持久化值。如果两者都存在,则结果未定义且不太可能起作用。

以下是示例

@Column(name = "delFlag", nullable = false, columnDefinition = "boolean default false")
private boolean delFlag;   

@Column(length = 30)
private String propertyState;

实体中的字段有访问模式的概念。如果您想使用混合访问模式(即对某些属性的字段使用注释,对其他属性的getter使用注释),您也可以这样做

例如:

设置实体的默认访问模式

@Entity
@Access(AccessType.FIELD)
public class Test implements Serializable {..}
这将默认为字段级别的注释。 然后,对于要在getter上注释的属性,显式地将访问类型设置为PROPERTY:

@Access(AccessType.PROPERTY)
@Column(length=25)
public String getInfo() { return info; }

在@column注释中指定长度与在同一注释中的columnDefinition变量中提供长度有什么区别?