我使用Hibernate注释有如下关系,这是我尝试过的:
public class Job{
...
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "jobs_resource_locations")
@ForeignKey(name = "job_inputs_fk")
@Index(name="job_inputs_fk")
private List<FileSystemLocation> inputs;
Run Code Online (Sandbox Code Playgroud)
这样的事情很好地适用于ManyToOne,如下所示:
@ManyToOne
@JoinColumn(name = "service_call_id", referencedColumnName = "id")
@ForeignKey(name = "job_service_call_fk")
@Index(name = "job_service_call_fk")
private ServiceCall serviceCall;
Run Code Online (Sandbox Code Playgroud)
我想确保外键在PostgreSQL上被索引,并且模式在MySQL上看起来类似,因此@ForeignKey和@Index具有相同的名称(MySQL总是创建一个与FK同名的索引).
我不能在反面创建索引,因为FileSystemLocation不知道这种关系.因此JoinTable.
前一个示例失败,因为Hibernate在Job中找不到要索引的列:
org.hibernate.MappingException: Unable to find logical column name from physical name null in table jobs
Run Code Online (Sandbox Code Playgroud)
有谁知道如何使用Hibernate在JoinTable外键上创建索引?