【发布时间】:2016-10-27 14:58:50
【问题描述】:
我有一个沿 3 个类映射的实体层次结构,如下所示:
Event.java:
@Entity
@Table(name = "events")
public class Event implements Serializable
{
@Id
@GeneratedValue
@Column(name = "id")
private long id;
@Enumerated(EnumType.STRING)
@NotNull
@Column(name = "department_name", nullable = false)
private Department department;
@NotNull
@Lob
@Column(name = "business_identifier", nullable = false)
private byte[] businessIdentifier;
@Embedded
private AbstractEventInformation eventInformation;
public Event(
final Department department,
final AbstractEventInformation eventInformation
)
{
this.department = department;
this.eventInformation = eventInformation;
}
@PrePersist
public void saveBusinessIdentifier()
{
this.businessIdentifier = eventInformation.getBusinessIdentifier();
}
public byte[] getBusinessIdentifier()
{
return null != businessIdentifier ? this.businessIdentifier : eventInformation.getBusinessIdentifier();
}
}
AbstractEventInformation.java:
@Embeddable
public abstract class AbstractEventInformation
{
public abstract byte[] getBusinessIdentifier();
}
OrderEventInformation.java:
import com.google.common.primitives.Ints;
public class OrderEventInformation extends AbstractEventInformation
{
private final int orderId;
public OrderEventInformation(final int orderId)
{
this.orderId = orderId;
}
@Override
public byte[] getBusinessIdentifier()
{
return Ints.toByteArray(orderId);
}
}
这是绑定到Event的存储库:
EventRepository.java:
public interface EventRepository extends JpaRepository<Event, Long>
{
int countByDepartmentAndBusinessIdentifier(Department department, byte[] businessIdentifier);
}
这种结构非常适合将条目保存到events 表中。但是,由于某种原因,当我尝试使用 countByDepartmentAndBusinessIdentifier 检查 MySQL 中的重复项时,此方法总是返回 0。
我有使用 H2 运行的集成测试,在这些测试中,重复检查工作得很好,这似乎是 MySQL 特有的。
起初我认为这可能与我的类的结构方式有关,使用Embeddable、抽象方法等,但我认为如果这是问题所在,那么保存值将无法正常工作。
有人知道我在这里缺少什么吗?
顺便说一句,我正在使用 Spring Boot 版本 1.3.5.RELEASE 和 spring-boot-starter-data-jpa。
非常感谢您的帮助!
【问题讨论】:
标签: java mysql spring spring-data-jpa