我有一个Audit表,主键作为列REQUEST_ID, AUDIT_TIMESTAMP
的复合键。
我编写了我的域类,如下所示
@EqualsAndHashCode
class Audit implements Serializable {
Integer requestId
Timestamp timestamp
boolean equals(other) {
if (!(other instanceof Audit)) {
return false
}
other.requestId == requestId && other.timestamp == timestamp
}
int hashCode() {
def builder = new HashCodeBuilder()
builder.append requestId
builder.append timestamp
builder.toHashCode()
}
static constraints = {
requestId size: 19
}
static mapping = {
table 'AUDIT'
version false
id composite: ['requestId', 'timestamp']
requestId column: 'REQUEST_ID', index: 'AUDIT_IDX'
timestamp column: 'AUDIT_TIMESTAMP'
}}
我的测试课如下:
class AuditIntegrationSpec extends Specification {
Audit auditLog;
def setup() {
auditLog = new Audit()
auditLog.setRequestId(12)
auditLog.setTimestamp(new Timestamp(new Date().getTime()))
}
void "test something"() {
when : {
auditLog.save(flush: true)
}
}
}
不确定为什么我的对象没有持久化到数据库。我没有在日志中看到任何错误或异常。测试顺利通过。不确定是什么问题。
答案 0 :(得分:0)
使用failOnError: true
后,我发现问题不在于复合键。其他一些专栏导致了这个问题。固定。我必须使用@EqualsAndHashCode
并且dint必须实施equals
或hashcode
方法。