为什么SqlExceptionHelper将布尔约束违反解释为\ x00

时间:2018-01-12 09:09:50

标签: java mysql hibernate jpa

我有以下域对象

@Table(uniqueConstraints={@UniqueConstraint(columnNames={"name", "company_id", "global"}, name="UC_name_companyId_global")})
@Entity
@Audited
public class AccessLevel implements Serializable, GlobalEntityInstance {

private static final long serialVersionUID = -7215569721971710808L;

  @Size(min = 2)
  @Column(nullable = false)
  private String name;

  @ManyToOne(optional = false)
  private Company company;

  @Column
  private boolean global = false;

  @Column(nullable = false)
  private GeneralStatus status;
}

company属性已映射到列company_id

我创建了一个测试用例,用于测试添加了访问级别时是否使用相同的名称','公司'和'全球'抛出值DataIntegrityViolationException。 我的问题是关于消息:

o.h.engine.jdbc.spi.SqlExceptionHelper : Duplicate entry 'Temp Level-1-\x00' for key 'UC_name_companyId_global'

到底是什么' \ x00' (或' \ x01'如果保存为true),为什么SqlExceptionHelper映射/解析布尔值? 复制条目键不应为“Temp Level-1-false'?

提前致谢, 格兰特

更新

我目前正在使用MySQl 5.6

1 个答案:

答案 0 :(得分:2)

\x00为十六进制0\x01为十六进制1。通常(但总是)使用falsetrue的值。例如,MySQL将布尔列存储为BIT(1),因此它在内部使用0/1而不是true/false