@Entity
@Table(name="test_student")
public class Student{
private int id;
private String name;
private Teacher teacher; @Id
@GeneratedValue
public int getId(){
return
}
public String getName() {
return name;
}
public void setId(int id){
this.id=id;
}
public void setName(String name) {
this.name = name;
}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="teacher_id")
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher =teacher;
}
}
@Entity
@Table(name="test_teacher")
public class Teacher{
private int id;
@public int getId(){
return id;
}
.....
}
测试后的建表语句是
create table test_student
id integer not null auto_increment,
name varchar(255),
teacher_id number(10,0),
primary key (id)
) create table test_teacher{
id integer not null auto_increment,
name varchar(255),
primary key (id)
) alter table test_
add constraint FK4347BB8E274DEC50
foreign key (teacher_id)
references test_teacher
正规的后面不是还要多个references test_teacher(id)吗?
感觉上是teacher_id关联着Teacher整张表而不是Teacher那张表的id
还是有哪个地方Annotation没有配
@Table(name="test_student")
public class Student{
private int id;
private String name;
private Teacher teacher; @Id
@GeneratedValue
public int getId(){
return
}
public String getName() {
return name;
}
public void setId(int id){
this.id=id;
}
public void setName(String name) {
this.name = name;
}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="teacher_id")
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher =teacher;
}
}
@Entity
@Table(name="test_teacher")
public class Teacher{
private int id;
@public int getId(){
return id;
}
.....
}
测试后的建表语句是
create table test_student
id integer not null auto_increment,
name varchar(255),
teacher_id number(10,0),
primary key (id)
) create table test_teacher{
id integer not null auto_increment,
name varchar(255),
primary key (id)
) alter table test_
add constraint FK4347BB8E274DEC50
foreign key (teacher_id)
references test_teacher
正规的后面不是还要多个references test_teacher(id)吗?
感觉上是teacher_id关联着Teacher整张表而不是Teacher那张表的id
还是有哪个地方Annotation没有配
感觉上是teacher_id关联着Teacher整张表而不是Teacher那张表的id谁和楼主说正规的是要多个references test_teacher(id)的指向某个列的?
这样说吧,如果你不指明test_teacher(Id)的话,那么系统会默认去指向test_teacher的主键的。懂了吧?
知道为什么你在建立外键关系的时候,如果references的那个表没有主键就会创建失败,不让你创建了吧?因为如果你不写成references test_teacher(id),而是写成references test_teacher,那么他就会默认指向表test_teacher的主键。如果这个表没有主键,当然就不让你创建了。从这一点也可以反过来说明,如果你不指明某个列,那么他就会指向这个表的主键。明白了?
create table test_student
id integer not null auto_increment,
name varchar(255),
teacher_id number(10,0),
primary key (id)
) create table test_teacher{
id integer not null auto_increment,
name varchar(255),
primary key (id)
)
alter table test_
add constraint FK4347BB8E274DEC50
foreign key (teacher_id)
references test_teacher
你把test_teacher表的主键去了再执行这句话试试,一定报错。说你这个表没有主键。这不是说明问题了吗,你这句话没指定test_teacher的列,那他就默认指向test_teacher的主键。你的表有主键,那就没问题。如果没有,就会报错。我想我只能说这么多了。再不理解我没办法了
test_teacher表里面主键id对应
test_student里面的teacherid外键
正常约束下来应该是
add constraint FK4347BB8E274DEC50
foreign key (teacher_id)
references test_teacher(id)(这里应该有个id的)
而我输出的没有Id
是不是当于test_student表里面的teacherid外键对应的主键不是test_teacher表里面的id了?
那对应的又是什么?
我的意思是到数据库里面应该是
test_teacher表里面主键id对应
test_student里面的teacherid外键
正常约束下来应该是
add constraint FK4347BB8E274DEC50
foreign key (teacher_id)
references test_teacher(id)(这里应该有个id的)
而我输出的没有Id
是不是当于t……
[/Quote你输出的是没有。但是他的确已经指向test_teacher的ID了。因为默认就是指向主键。OK?你就说你的test_teacher里的ID是不是主键吧!如果是,输出的这段语句是没错的,就是建立了与test_teacher的主键ID对应的外键关系了