休眠ForeignKey映射注释
我想休眠生成一些表与外键等。我给你我想Hibernate来生成查询的一个例子:休眠ForeignKey映射注释
create table RealtimeCost(id INTEGER not null primary key Autoincrement,
mnemonic varchar(50)not null references Exchange(mnemonic),
sid int not null references License(sid),
price numeric(10,2) not null)
所以此查询应该由Hibernate通过注解生成。对应的类是这样的:
什么在RealtimeCost
的
mnemonic
应该映射到
@Entity
@Table
public class RealtimeCost {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@MapsId("mnemonic")
@JoinColumn(referencedColumnName="sid")
private String mnemonic;
@MapsId("sid")
@JoinColumn(referencedColumnName="sid")
private Integer sid;
@Column
private Double price;
例子(RealtimeCost
每个助记符在Exchange
准确值为1):
@Entity
@Table
public class Exchange {
@Id
@Column(name="mnemonic")
private String exchange;
@Column
private String description;
正如你可以看到我已经在文档的帮助下尝试了一下,但我无法通过休眠生成外键。如果有人能够告诉我这个班级需要的注释和价值,那真的很友善,所以我可以自己为其他班级做这些。也请告诉我,如果我需要更改Exchange
类中映射工作的任何内容。在此先感谢
我不是专家,但我们让hibernate完成加入实体的javax.persistence注释的所有工作。
@javax.persistence.ManyToOne(fetch = javax.persistence.FetchType.EAGER, optional = true)
@javax.persistence.JoinColumn(name = "VIEWTYPE_ID", nullable = true, unique = false, insertable = true, updatable = true)
private com.company.other.subproject.ViewType viewType;
也许这就是你需要的。因为这让hibernate关心必须创建的表,并且foreignKeys会使用与之通信的数据库的方言自动创建。
您应该在一个实体中设置关联,并在另一个实体中使用mappedBy
。您不需要@MapsId
,因为您没有使用嵌入式实体(请阅读文档)。在@OneToMany
和@ManyToOne
关系看一看:
@Entity
@Table
public class RealtimeCost {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToMany
@JoinColumn(name="mnemonic")
private Exchange exchange;
...
}
@Entity
@Table
public class Exchange {
@Id
@Column(name="mnemonic")
private String mnemonic;
@Column
private String description;
@ManyToOne(mappedBy="exchange")
private RealtimeCost realtimeCost;
...
}
这个'@ManyToOne(mappedBy =“exchange”)'导致错误的示例注释me'注释类型ManyToOne'没有定义属性mappedBy – Aelop
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "accommodation_type", unique = true, nullable = false)
private AccommodationType accommodationType;
@ManyToOne()
根据@JoinColumn()
name
在@JoinColumn()
创建一个关系就是你想连接的表名。
然后,当你创建一个要连接到主类的类,你首先需要给它一个表名下方@Entity
e.g @Table(name="accommodation_types")
然后创建您的变量。
//bi-directional many-to-one association to Accommodation
@OneToMany(mappedBy="accommodationType", fetch=FetchType.EAGER)
private List<Accommodation> accommodations;
mappedBy
的值是主类中的变量名。
发表在这里的每个答案都得到了我的赞赏,因为每个人都挺对,但这不是我正在寻找的100%,但它帮助我自己解决了我的问题。对于i张贴例如i正在寻求解决方案如下(我还添加不可为空):
@Entity
@Table
public class RealtimeCost {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
@JoinColumn(name = "mnemonic",nullable=false)
private Exchange exchange;
@ManyToOne
@JoinColumn(name = "sid",nullable=false)
private License license;
@Column(nullable=false)
private Double price;
这些是:i拟出售RealtimeCost
类注释。我不需要Exchange类中的任何特殊注释。@Nico答案与我所需要的最接近,因此他的答案将被接受
这是否将类型'ViewType'的对象映射到类'ViewType'的id? – Aelop
你能告诉我你是如何注释viewtype ID吗? – Aelop
对不起,对了。是的,它将实体映射为ID参考。使用FetchType,您可以进一步指定应该如何加载它。 (Lazy or Eager) ViewType用这个'@AttributeOverrides({@AttributeOverride(name =“id”,column = @Column(name =“VIEWTYPE_ID”)) }''注解,但是这个注解是在类定义。因为我们使用另一种声明实体的策略。但id列是用@Id注解的。 这是'@ javax.persistence.Basic(fetch = javax.persistence.FetchType.EAGER,optional = false)' – Nico