唯一约束未对Hibernate的SchemaExport强制执行 - java

我很不确定为什么我的实体类没有创建我所需的表架构

@Entity
@Table(name = "User")
public class User implements Serializable {
    private Long id;
    private String loginName;

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
    @Column(name = "login_name", unique = true)
    public String getLoginName() {
        return loginName;
    }
    //other setters
}

当我使用架构导出时。

new SchemaExport(config).create(true, true);

它创建了此SQL,但随后没有向我的login_name字段添加任何唯一约束。

drop table User
create table User (id bigint generated by default as identity, login_name varchar(255)primary key (id))

我正在使用Apache Derby,并且已经检查了Derby的参考手册,它确实支持该列上的Unique约束。我尝试在类上添加一个uniqueconstraint批注,但结果是相同的。

任何想法?

java大神给出的解决方案

问题是Derby扩展了DB2语言,该语言将“ supportsNotNullUnique”指定为“ false”。因此,解决方案是创建您的自定义Derby方言并更改此方法以返回“ true”,或将字段标记为nullable = false。

@Column(name = "login_name", unique = true, nullable=false)

要么

import org.hibernate.dialect.DerbyDialect;

public class CustomDerbyDialect extends DerbyDialect {
    public boolean supportsNotNullUnique() {
        return true;
    }
}

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

如何修改休眠的SQL查询? - java

我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…

如何在Java中以语言环境正确的顺序格式化日期和月份? - java

有没有一种方法可以用Java / Kotlin中的区域设置正确的格式格式化日和月(以紧凑格式)而不格式化年份?因此,对于英语,应为“ 9月20日”,而对于瑞典语为“ 9月20日”。为了进行比较,在Cocoa平台上,我可以执行以下操作(在Swift中):let formatter = DateFormatter() formatter.locale = Loc…

用Java构建大批量数据处理工具 - java

Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。 3年前关闭。 Improve this question 我正在尝试使用Java构建ETL工具。 ETL工具用于对大量数据(关系型和其他类型)进行批量读取,…

用Java封装对象? - java

private中的Java提供类级别的封装。可以封装一个对象吗?还是这样做徒劳?例如,如果我们将一个类定义为 public class Person { private String ssn; private ArrayList<Person> friends = new ArrayList<Person>(); public voi…