java 主键 外键 表_java – 将主键作为外键映射到另一个表

关于外键关系及其JPA对应关系我有问题.

在下表中. means_of_transport是一个连续编号的表.其他表具有较少的条目,其主键作为外键的映射到means_of_transport的主键.可悲的是,我无法改变数据模型.

表means_of_transport

CREATE TABLE means_of_transport (

id INT PRIMARY KEY NOT NULL,

max_capacity INT

);

表ocean_ship

CREATE TABLE ocean_ship (

means_of_transport_id INT PRIMARY KEY NOT NULL,

name VARCHAR(45) NOT NULL,

FOREIGN KEY ( means_of_transport_id ) REFERENCES means_of_transport ( id )

);

CREATE INDEX fk_ship_means_of_transport1_idx ON ocean_ship ( means_of_transport_id );

除了ocean_ship之外,还有更多的表具有相同的键结构,但其他字段.

MeansOfTransport.java

@Entity

@Table(name = "means_of_transport")

public class MeansOfTransport extends Model {

@Id

public Integer id;

public Integer maxCapacity;

}

OceanShip.java

@Entity

@Table(name = "ocean_ship")

public class OceanShip extends Model {

@Id

@OneToOne

@JoinColumn(table = "means_of_transport", referencedColumnName = "id")

public MeansOfTransport meansOfTransport;

public String name;

}

现在,每当我尝试在另一个JPA类中使用OceanShip作为字段时,我都会收到此错误:读取models.Classname的注释时出错.

我错过了一些注释吗?

编辑

用法示例:

@ManyToOne

@Column(name = "ocean_ship")

public OceanShip oceanShip;

完整堆栈跟踪:

play.api.UnexpectedException: Unexpected exception[RuntimeException: Error reading annotations for models.ContainerOrder]

at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:150) ~[play_2.10.jar:2.1.5]

at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:114) ~[play_2.10.jar:2.1.5]

at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]

at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:114) ~[play_2.10.jar:2.1.5]

at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.1.5]

at scala.util.Either$RightProjection.flatMap(Either.scala:523) ~[scala-library.jar:na]

Caused by: java.lang.RuntimeException: Error reading annotations for models.ContainerOrder

at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:54) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1034) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:565) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:252) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.core.InternalConfiguration.(InternalConfiguration.java:124) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:210) ~[avaje-ebeanorm-server.jar:na]

Caused by: java.lang.NullPointerException: null

at com.avaje.ebeaninternal.server.deploy.BeanTable.createJoinColumn(BeanTable.java:94) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readAssocOne(AnnotationAssocOnes.java:145) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.parse(AnnotationAssocOnes.java:54) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:45) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1034) ~[avaje-ebeanorm-server.jar:na]

at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:565) ~[avaje-ebeanorm-server.jar:na]

解决方法:

我认为你的数据库模型在概念上是不对的.

它应该是这样的.

ocean_ship_id是ocean_ship表的PK.

来自ocean_ship的means_of_transport_id

只是一个FK到“基地”表means_of_transport.

所以我会说你的数据库模型正确,

然后担心JPA映射.

CREATE TABLE ocean_ship (

ocean_ship_id INT PRIMARY KEY NOT NULL,

means_of_transport_id INT NOT NULL,

name VARCHAR(45) NOT NULL,

FOREIGN KEY ( means_of_transport_id ) REFERENCES means_of_transport ( id )

);

标签:ebean,java,mysql,jpa,playframework-2-0

来源: https://codeday.me/bug/20190831/1774718.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值