Java 如何使用列表上的唯一合同<;项目>;?
我的实体看起来像Java 如何使用列表上的唯一合同<;项目>;?,java,jakarta-ee,jpa,Java,Jakarta Ee,Jpa,我的实体看起来像 @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = {"id", "service_version_id"})) public class MarketVersion extends AbstractVersion<MarketVersion> { @ManyToOne(cascade = CascadeType.ALL) priva
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"id", "service_version_id"}))
public class MarketVersion extends AbstractVersion<MarketVersion> {
@ManyToOne(cascade = CascadeType.ALL)
private Market market;
@OneToOne
private MarketVersion parentVersion;
@OneToMany(cascade = CascadeType.MERGE)
@JoinColumn(name = "services_id", referencedColumnName = "id")
private List<ServiceVersion> services;
}
我确信,作为一个新手,我没有做正确的事情,但无法理解,什么
请告知
我想要一个新表,它对唯一性(市场版本id和服务版本id)有约束。合同中的列名为
服务版本id
,而实体中的联接列则在列服务版本id
上联接。
您需要在数据库中创建列
service\u version\u id
,或者根据您试图实现的目标将约束列重命名为services\u id
。您的数据库中是否有service\u version\u id
列?不,如何创建?我认为您将此约束放在了错误的实体上,或者在市场上错误地使用OneToName版本,而该版本应为OneToOne类型。也就是说,假设您希望MarketVersion表中的service_id字段是ServiceVersion的外键,并且是唯一约束的一部分。您还没有显示实体的ID映射-可能ID字段将是pk,因此自动唯一,无需添加约束。我认为我需要的是唯一的(ID和服务),我该怎么做?
public class ServiceVersion extends AbstractVersion<ServiceVersion> {
@ManyToOne(cascade = CascadeType.ALL)
private Service service;
@OneToOne
private ServiceVersion parentVersion;
@Column
private String description;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private ServiceImplementations implementation;
}
[hibernatetool] javax.persistence.PersistenceException: [PersistenceUnit: market] Unable to configure EntityManagerFactory
[hibernatetool] org.hibernate.AnnotationException: Unable to create unique key constraint (id, service_version_id) on table MarketVersion: service_version_id not found