【发布时间】:2015-11-04 13:25:28
【问题描述】:
我有一个简单的关系,如上图所示。
我可以使用以下 Hibernate Mapping 来保持它:
<class name="Strategy" table="Strategy">
<id name="id" column="StrategyId" unsaved-value="any">
<generator class="identity"/>
</id>
<property name="status" column="Status"/>
</class>
<class name="Alert" table="Alert">
<id name="id" column="AlertId">
<generator class="identity"/>
</id>
<property name="name" column="Name"/>
</class>
<class name="StrategyAlert" table="StrategyAlert">
<composite-id>
<key-many-to-one name="strategy" class="Strategy" column="StrategyId"/>
<key-many-to-one name="alert" class="Alert" column="AlertId"/>
</composite-id>
<property name="nominal" column="Nominal"/>
</class>
我很难弄清楚如何使用 JPA 1.0 中的注释来做到这一点。
这是我目前得到的:
警报类:
@Entity
@Table(name="ALERT")
public class Alert implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ALERTID")
private int id;
@Column(name="NAME")
private String name;
}
策略类:
@Entity
@Table(name="STRATEGY")
public class Strategy implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="STRATEGYID")
private int id;
@Column(name="STATUS")
private String status;
}
StrategyAlertPK 类:
public class StrategyAlertPK implements Serializable {
private int strategyId;
private int alertId;
}
StrategyAlert 类:
@Entity
@Table(name="STRATEGYALERT")
@IdClass(StrategyAlertPK.class)
public class StrategyAlert implements Serializable {
@Id
@Column(name="STRATEGYID")
private int strategyId;
@Id
@Column(name="ALERTID")
private int alertId;
@ManyToOne
@JoinColumn(name="STRATEGYID", insertable=false, updatable=false)
private Strategy strategy;
@ManyToOne
@JoinColumn(name="ALERTID", insertable=false, updatable=false)
private Alert alert;
@Column
private String nominal;
}
测试用例:
em.getTransaction().begin();
Alert alert = new Alert();
alert.setName("NAME");
em.persist(alert);
Strategy strategy = new Strategy();
strategy.setStatus("STATUS");
em.persist(strategy);
StrategyAlert strategyAlert = new StrategyAlert();
strategyAlert.setAlert(alert);
strategyAlert.setStrategy(strategy);
strategyAlert.setNominal("NOMINAL");
em.persist(strategyAlert);
em.getTransaction().commit();
我收到以下错误:
参照完整性约束违规:“FK80432DA9CE00672E: PUBLIC.STRATEGYALERT FOREIGN KEY(STRATEGYID) REFERENCES PUBLIC.STRATEGY(STRATEGYID) (0)
我正在使用<property name="hibernate.hbm2ddl.auto" value="create" /> 来生成表格。
如何正确注释 StrategyAlert 类?
【问题讨论】:
标签: java hibernate jpa annotations