我知道SO和网络上都有很多这些问题,但是所有答案都建议使用columnDefinition
特定于数据库的信息,因此不适用于我,因为我正在使用的系统需要在不同的数据库上运行。
我发现这个hibernate问题,有人要求使用此功能进行注释。该问题已经解决,表示另一个问题将涉及该功能。第二个问题显然添加了注释@Generated
以及其他一些注释,但是我找不到有关如何使用这些新注释定义默认列值的文档。
所以我的问题是:有谁知道我该如何定义带注释的默认列值(而不是使用columnDefinition
)?
编辑:
进一步澄清我的问题:当我添加新的非null列时,我需要Hibernate更新现有架构(将新列添加到相应的表中)。但是由于该列不为null,因此数据库无法在不指定默认值的情况下创建该列(如果表中已经存在某些行)。因此,我需要指示Hibernate发出以下DDL语句:ALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def'
,但它必须独立于所使用的数据库。
我认为您不需要任何文档,Java文档可以自我解释。如果我理解正确,则需要一种方法来为字段设置默认值。如果是,请参见以下代码段。
@Entity
@Table(name = "my_entity")
public class SomeEntity extends BaseEntity {
public static final class MyValueGenerator implements
ValueGenerator<String> {
@Override
public String generateValue(Session session, Object owner) {
return "This is my default name";
}
}
@Basic
@Column(name = "name", insertable = true, updatable = true, nullable = false, length = 255)
// This will add a DDL default
@ColumnDefault("'This is my default name'")
// This will add a runtime default.
@GeneratorType(type = MyValueGenerator.class)
private String name;
// getters and setters
}
我在互联网上搜索过,看到了关于在mysql中使用Hibernate注释在实体类中设置默认值的想法,我已经完成了将默认值设置为具有数据类型整数的列,如下所示。 而且工作得很好。 但是我没有看到任何varchar/string数据类型的示例,我尝试了columnDefinition中的不同类型,比如, 使用“长度”属性:- 等等。 但在这种情况下,表不是由hibernate创建的,这可能是由于语法错误
问题内容: 如何创建以下注释的实例(所有字段均设置为其默认值)。 我试过了,但这似乎不起作用… 问题答案: 您无法创建实例,但至少要获取默认值 然后,可以使用动态代理返回默认值。据我所知,这也是Java本身处理批注的方式。
问题内容: 我有一个复杂的对象图,正在使用Json.NET进行序列化/反序列化。有些对象是从抽象类派生的,因此为了使反序列化正常工作,我需要创建一个custom 。它的唯一作用是在反序列化时选择抽象类的适当具体实现,并允许Json.NET继续进行。 我要序列化时出现问题。我根本不需要做任何自定义。我希望获得与没有custom时将使用的行为完全相同的行为。 但是,由于我将自定义JsonConvert
我知道DateTimeFormat注释可以在Spring中的模型类的日期属性上定义,但是有没有任何方法可以为Spring模型类中的所有日期定义一个默认的DateTimeFormat注释呢? @DateTimeFormat(pattern=“MM/DD/YYYY”) 私人日期DeliveryDate; 它将使我不必对每个日期字段进行注释。它还将使我更容易更改应用程序宽日期格式以后。
在Hibernate中,要指定用于加入关联的列,请使用@JoinCol列注释,例如: 在大多数情况下,列的名称是用大写的类名加上。因此,从Hibernate自动派生它是合理的(例如,在Django的ORM中就是这样做的)。但这样的行为是以某种方式实施的吗?