JPA + MySQL - 由数据库生成的列值



我正在使用带有"始终生成"作为公式的列。当我尝试使用 JPA 保存实体值时,我得到

java.sql.SQLException: The value specified for generated column 'bucket' in table 'discover_cache' is not allowed.

类定义:

@Entity
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "discover_cache")
@IdClass(DiscoverCacheId.class)
public class DiscoverCache {
@Id
@Column(length = 36)
private String userId;
@Id
private int postId;
@Column(columnDefinition = "tinyint(4) GENERATED ALWAYS AS (floor(TO_SECONDS(`created_date`) / 900) % 17) STORED NOT NULL")
@Id
private short bucket;
@CreatedDate
@Column(name = "created_date", updatable = false, columnDefinition = "DATETIME(3)")
@JsonIgnore
private Instant createdDate = Instant.now();
public DiscoverCache(String userId, int postId) {
this.userId = userId;
this.postId = postId;
}
}
@EqualsAndHashCode
@NoArgsConstructor
public class DiscoverCacheId implements Serializable {
@Column(length = 36)
private String userId;
private int postId;
@Column(columnDefinition = "tinyint(4) GENERATED ALWAYS AS (floor(TO_SECONDS(`created_date`) / 900) % 17) STORED NOT NULL")
private short bucket;
public DiscoverCacheId(String userId, int postId, short bucket) {
this.userId = userId;
this.postId = postId;
this.bucket = bucket;
}
}

如何告诉 JPA 在持久化时忽略此值,以便数据库可以计算我?我当然可以使用本机查询来保存它,但我想使用 JpaRepository<>

将可插入和可更新设置为false。

@Column(name="user_id", nullable = true, insertable = false, updatable = false)
var userId: Long? = null

最新更新