@Embeddable
public class ID implements Serializable {
private Long autoin; // Surrogate key
private Integer serverId; // instance identifier
@Column(name = "autoin_fix")
public Long getAutoin() {
return this.autoin;
}
@Column(name = "servdat_fk")
public Integer getServerId() {
return this.serverId;
}
// ... setter, equals, hashCode ...
}
@Entity
@Table(name = "LEADS")
public class Request {
private Long id;
private Article article;
private Location location;
@Id
@Column(name = "autoin_fix")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "auto-increment")
@GenericGenerator(name = "auto-increment", strategy = "sequence",
parameters = @org.hibernate.annotations.Parameter(name = "sequence", value = "AUTOINCREMENT"))
public Long getId() {
return this.id;
}
@ManyToOne
@JoinColumns({
@JoinColumn(name = "artikel_fk", referencedColumnName = "autoin_fix",
insertable = false, updatable = false), // Here is the problem!
@JoinColumn(name = "servdat_fk", referencedColumnName = "servdat_fk",
insertable = false, updatable = false)
})
public Article getArticle() {
return this.article;
}
@ManyToOne
@JoinColumns({
@JoinColumn(name = "standort_fk", referencedColumnName = "autoin_fix"),
@JoinColumn(name = "servdat_fk", referencedColumnName = "servdat_fk")
})
public Location getLocation() {
return this.location;
}
// Setters omitted
}
TABLE leads
-------------
autoin_fix
artikel_fk
standort_fk
servdat_fk // This only exists once, but is part of the association to both Article and Location!
// This is illegal and the application won't start
@JoinColumns({
@JoinColumn(name = "artikel_fk", referencedColumnName = "autoin_fix"),
@JoinColumn(name = "servdat_fk", referencedColumnName = "servdat_fk", insertable = false, updatable = false)
})
有人知道解决这个问题的办法吗?或者这是不可能使用Hibernate/JPA进行映射的吗?
Edit:Article和Location的(简化)定义(真的没那么有趣,重要的是它们使用了复合主键):
@Entity
@Table(name = "ARTIKEL")
public class Article {
private ID id;
private String headline;
private String description;
@EmbeddedId
public ID getId() {
return this.id;
}
@Column(name = "artbesch")
public String getDescription() {
return this.description;
}
@Column(name = "artueschr")
public String getHeadline() {
return this.headline;
}
// Setters omitted
}
@Entity
@Table(name = "STANDORT")
public class Location {
private ID id;
private GeoCoordinates geoCoordinates;
private Name name;
@EmbeddedId
public ID getId() {
return this.id;
}
@Embedded
public GeoCoordinates getGeoCoordinates() {
return this.geoCoordinates;
}
@Embedded
public Name getName() {
return this.name;
}
// Setters omitted
}
我认为,如果依赖实体的派生标识符是嵌入式id类的形式,那么表示关系的id类的每个属性都应该由对应关系属性上的@Mapsid注释引用。
例如:
@Entity
public class Request {
// ...
@Id
int id;
@MapsId
@ManyToOne
private Article article;
// ...
}
我希望这能奏效,因为我现在不能尝试。
问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f
问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f
我有一个类似的问题如下,但解决方案没有解决我的问题。 hibernate复合主键包含复合外键,如何映射此 我试图连接2个表,每个表都有一个复合主键和部分外键引用。 你能帮忙吗?
问题内容: 我在为某些实体设置jpa映射时遇到麻烦。我有一个如下定义的父实体。 然后,我有一个带有复合键的子实体,以及此表的主键的外键,如下所示: 我知道子实体不正确,但是我不确定如何将其设置为具有复合PK。我知道我需要设置一个PK类,但是当一个字段是父类的外键时,我不确定该怎么做。一旦设置好,父级将如何引用子级实体? 任何帮助表示赞赏。 问题答案: 这受JPA 2规范的 第2.4.1节“与派生身
问题内容: 我在这里搜索,但未找到任何类似的主题,因此我发布了一个新问题。 我正在使用现有数据库上的Hibernate。我们不允许更改表的结构和数据。该应用程序正在从数据库读取数据,并根据某种逻辑迁移到另一个数据存储。 现在的问题是关于复合PK映射。例如 表A具有复合PK。 表B也有一个复合PK,此复合PK的一部分是A的PK,此处也用作FK。 我尝试了几种方法,但都无济于事。谁能告诉一个有效的Hi
我遇到了一个问题,我不知道是否可以通过使用Hibernate/JPA注释来解决这个问题。问题是,我有一个复合键,它的列与我的foreignkey复合id中的一个相同,我希望在表中共享这个相同的列。例如: 问题是我如何在A和B之间共享idShared列,并在@manytoone中使用它作为外键? 我已经尝试在名为idShared的@JoinColumns中使用@JoinColumns,但我得到一个错