我经常指定这样的@Column注释:
@Column(columnDefinition="character varying (100) not null",length=100,nullable=false)
Run Code Online (Sandbox Code Playgroud)
如您所见,我指定length,nullable即使columnDefinition已经指定了那些.那是因为我不知道这些值的确切使用位置/时间.
那么,在指定时columnDefinition,哪些其他属性@Column是多余的?
如果重要,我使用Hibernate和PostgreSQL
我在使用Hibernate和PostgreSQL进行生产以及使用HSQLDB进行测试时遇到了问题.
我使用自上而下的方法让Hibernate创建数据库模式.
我也在使用注释; hibernate.cfg.xml的映射部分只包含像
<mapping class="package.subpackage.ClassName" />
Hibernate默认的字符串变量到PostgreSQL上的字符变量(255),这在某些情况下对我来说还不够,所以我必须手动重新定义一些列
@Column(columnDefinition = "TEXT").
但是,TEXT类型对于HSQLDB无效,因此无法创建这些表.
谁能帮忙解决这个问题?
我在JPA遇到了一些麻烦.如果有人能提供解决方案,我会非常感激.用JPA(我使用的是MySQL DB),比方说,我有一个映射如下的类:
@Entity
class Employee{
int id;
String employeeName;
//getters and setters...
}
Run Code Online (Sandbox Code Playgroud)
映射到表时,我看到String varchar(255)在Mysql中映射.但是,假设我有一个名称超过255个字符的员工,它会显示数据截断错误.
我知道我们可以通过在Employee列中添加"length"属性来解决这个问题:
@column(length=1000)
String employeeName;
Run Code Online (Sandbox Code Playgroud)
这是唯一可行的方法吗?我想,如果我们只是在java中映射到String,数据库将动态分配长度.
我有一个带@Lob注释的简单EntityBean .如果我删除这个注释,我在JBossAS 6.0.0.Final和MySQL5上没有错误.但是如果我用它注释@Lob(因为mt在我的情况下包含大约100到5000个字符),如果我坚持实体,我在测试环境中会出错.
@Lob:mt映射到VARCHAR@Lob:mt映射到LONGTEXT(这是我想要的,但是我得到了错误)这是我的实体:
@Entity
@Table(name = "Description")
public class Description implements Serializable
{
public static final long serialVersionUID=1;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Lob
private String mt;
} // ... getter/setter
Run Code Online (Sandbox Code Playgroud)
错误在这里:
...
Caused by: org.hibernate.exception.GenericJDBCException: could not insert
[my.Description]
...
Caused by: java.sql.SQLException: Connection is not associated with a managed
connection.org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@3e4dd
...
Run Code Online (Sandbox Code Playgroud)
我真的不知道为什么我会得到这个(可重现的)错误.环境似乎没问题,许多其他测试都通过了,它甚至可以在没有@Lob注释的情况下工作.
这个问题与JPA有关:如何将String保存到数据库字段中,键入MYSQL Text,其中@Lob …