问题
我发现在调用StatelessSession#insert()时,hibernate 的批处理不适用于以下两个类。(即为每个调用创建了准备好的语句)。
父实体
@Entity
@Table(name = "950_ATC_LOG")
@DiscriminatorColumn(name = "TYPE", length = 1)
@DiscriminatorValue("C")
public class AtcLog {
@Id
@Column(name = "ATC_LOG_ID")
private long id;
// other memebers here...
}
子实体
@Entity
@DiscriminatorValue("A")
public class AllocationLog extends AtcLog {
// some members here
}
但是在我将实体更改为以下内容后,hibernate 开始按预期使用批处理:
父实体 - 新
@MappedSuperclass
public abstract class AbstractLog {
@Id
@Column(name = "ATC_LOG_ID")
private long id;
// some members here
}
子实体 - 新
@Entity
@Table(name = "950_ATC_LOG")
public class AtcLog extends AbstractLog {
@Column(name = "TYPE", length = 1, nullable = false)
private char type;
// some members here
}
问题
单表继承是否禁用休眠批处理?该文档仅说应使用“身份标识符生成器”禁用它,但我明确设置了 ID。我没有找到任何其他关于此类问题的参考。