Java EJB3-@列(可插入=“假”)问题
我正在用EJB3和Oracle Express Edition数据库构建一个J2SE应用程序 我的问题是这样的——我在项目中设置了一个EntityBean,它与数据库中的一个表相匹配。该表包含一个不可为空的列,该列具有默认值。我想要的是,当使用EJB将新数据持久化到此表时,列的值将获得其默认值。我在项目中是这样设置的:Java EJB3-@列(可插入=“假”)问题,java,jpa,ejb-3.0,toplink-essentials,ora-01400,Java,Jpa,Ejb 3.0,Toplink Essentials,Ora 01400,我正在用EJB3和Oracle Express Edition数据库构建一个J2SE应用程序 我的问题是这样的——我在项目中设置了一个EntityBean,它与数据库中的一个表相匹配。该表包含一个不可为空的列,该列具有默认值。我想要的是,当使用EJB将新数据持久化到此表时,列的值将获得其默认值。我在项目中是这样设置的: //holds user's first name @Basic(optional = true) @Column(name = "FIRST_NAME", insertable
//holds user's first name
@Basic(optional = true)
@Column(name = "FIRST_NAME", insertable = false, updatable = true, nullable = false)
private String m_firstName;
我还在ORM.XML文件中设置了它:
<basic name="firstName">
<column name="FIRST_NAME" insertable="false" updatable="true" nullable="false"/>
</basic>
这意味着持久性管理器尝试插入firstname字段,尽管我告诉它不要这样做
我做错什么了吗
谢谢 您可以在不使用
@Basic(optional=true)
的情况下进行尝试,因为to可为null
(在您的情况下,这似乎是错误的)
定义字段或属性的值是否可以为null
带有以下注释:
@Basic(optional = false)
@Column(name = "FIRST_NAME", insertable = false, updatable = true, nullable = false)
private String m_firstName;
生成SQL插入时,FIRST\u NAME
列肯定应该被忽略。换句话说,这听起来像是GlassFish社区开发的TopLink Essentials中的一个bug。实际上,我认为这个问题在(“Column annotation insertable=false仅在与Updateable=false一起使用时有效”)中有报告。遗憾的是,它不是固定的,所以我建议:
- 使用私有字符串m_firstName=“我的数据库默认值”代码>(是的,这很难看)-或者-
- 更改持久性提供程序(对于OpenJPA,Hibenate)
@Entity
@Table(name = "your_table")
@org.hibernate.annotations.Entity(
dynamicInsert = true
)
public class YourClass{
}
TopLink Essentials仅在insertable和updateable都为false时才会省略该列 这是固定在EclipseLink的,所以你应该考虑升级。
@Entity
@Table(name = "your_table")
@org.hibernate.annotations.Entity(
dynamicInsert = true
)
public class YourClass{
}