この問題を解決する方法についての調査を行いましたが、どれもそれには効果がありませんでした。私はそれがどのように機能するかを完全には理解していないことを知っています - それはまさにポイントですが、時には止めて助けを求める必要があります。Java/IntelliJの1つのクラスから別のクラスへの一対多と多対1の関係を作成する方法
私はサイドプロジェクトに取り組んでいます(そして私のプログラミングスキルに取り組んでいます)。私は中学生です。
1つのクラスに1対1の関係を持つ複数のフィールドがある2つのクラスを作成しようとしています。 1対M関係とM対M関係を持つフィールドは2つだけです。 "Dog"クラスにはpictureというフィールドがあり、これは "Picture"クラスと1対Mの関係になります。私の人生にとって、私がコードを実行するたびに、問題が発生します。クラスをシリアライズ可能にしたり、あるフィールドを別のフィールドにマッピングしたり、その逆を行ったり、CascadeTypeなどを使用するなど、いくつかの方法を試してみました。私はおそらく私はそれがJavaの概念を理解していても(私はIntelliJを使用している)Javaでどのように動作するのか分かりません。私が読んで、少数を示すために使用してみました
記事:
Entity Framework one-to-many and many-to-many relationship
Multiple 1:many relationship in Hibernate
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association
Hibernate One to Many and Many to One Relation
私は私がやろうとしていることに本当に近いと感じています...しかし、私は何かを見過ごしているようです。ひどく。
私のデータベースの意向:
が、私は自分の名前、体重等 各行(犬)を持つ犬のテーブル内の各行を作ってるんだが、それらに割り当てられた多くの写真を持っています。それらは、私が春のフレームワークを使用して呼び出す予定のデータベースのURLアドレスの形式になります。私はCloudinaryを見つけ、自分のコードを実装しようと思っていました。この私のサイドプロジェクトは、私が今までに見た中で最も基本的なウェブサイトを持っている現在の作業救助組織を改善することです。ここで
私のコードです:IntelliJの
から犬表/クラス
package com.claudiazeledon.LuckyLabsRescue.models;
import org.hibernate.annotations.Target;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Collection;
import java.util.Set;
@Entity
public class Dog{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column
private String name;
@Column
private Integer weight;
@Column
private Integer age;
@Column
private Gender gender;
@Column
private String color;
@OneToOne
private Temperament temperament;
@OneToOne
private Availability availability;
@OneToOne
private Health health;
@OneToMany
@JoinColumn(name = "picture_dp")
private Set<Picture> getPictures;
public Dog() {
}
public Dog(int id, String name, Integer weight, Integer age, Gender gender, String color, Temperament temperament, Availability availability, Health health, Set<Picture> getPictures) {
this.id = id;
this.name = name;
this.weight = weight;
this.age = age;
this.gender = gender;
this.color = color;
this.temperament = temperament;
this.availability = availability;
this.health = health;
this.getPictures = getPictures;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getWeight() {
return weight;
}
public void setWeight(Integer weight) {
this.weight = weight;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Temperament getTemperament() {
return temperament;
}
public void setTemperament(Temperament temperament) {
this.temperament = temperament;
}
public Availability getAvailability() {
return availability;
}
public void setAvailability(Availability availability) {
this.availability = availability;
}
public Health getHealth() {
return health;
}
public void setHealth(Health health) {
this.health = health;
}
public Set<Picture> getGetPictures() {
return getPictures;
}
public void setGetPictures(Set<Picture> getPictures) {
this.getPictures = getPictures;
}
}
ピクチャー表/クラス
package com.claudiazeledon.LuckyLabsRescue.models;
import javax.persistence.*;
import java.net.URL;
@Entity
@Table(name = "picture")
public class Picture{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "picture_dp", insertable = false, updatable = false)
private URL pictureURL;
// @ManyToOne
// @JoinColumn(name = "pictureId")
// @MapsId("pictureId")
// private Dog dogImage;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public URL getPictureURL() {
return pictureURL;
}
public void setPictureURL(URL pictureURL) {
this.pictureURL = pictureURL;
}
}
エラーメッセージ10
2017-11-16 15:20:35.300 INFO 24180 --- [ restartedMain] org.hibernate.Version : HHH000412: Hibernate Core {5.0.12.Final} 2017-11-16 15:20:35.301 INFO 24180 --- [ restartedMain] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found 2017-11-16 15:20:35.302 INFO 24180 --- [ restartedMain] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist 2017-11-16 15:20:35.418 INFO 24180 --- [ restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 2017-11-16 15:20:35.518 INFO 24180 --- [ restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect 2017-11-16 15:20:35.623 INFO 24180 --- [ restartedMain] o.h.e.j.e.i.LobCreatorBuilderImpl : HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 2017-11-16 15:20:35.625 INFO 24180 --- [ restartedMain] org.hibernate.type.BasicTypeRegistry : HHH000270: Type registration [java.util.UUID] overrides previous : [email protected] 2017-11-16 15:20:35.766 WARN 24180 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.claudiazeledon.LuckyLabsRescue.models.Picture.pictureURL references an unknown entity: java.net.URL 2017-11-16 15:20:35.771 INFO 24180 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2017-11-16 15:20:35.782 INFO 24180 --- [ restartedMain] utoConfigurationReportLoggingInitializer : Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2017-11-16 15:20:35.792 ERROR 24180 --- [ restartedMain] o.s.boot.SpringApplication : Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.claudiazeledon.LuckyLabsRescue.models.Picture.pictureURL references an unknown entity: java.net.URL at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.8.RELEASE.jar:1.5.8.RELEASE] at com.claudiazeledon.LuckyLabsRescue.LuckyLabsRescueApplication.main(LuckyLabsRescueApplication.java:10) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.5.8.RELEASE.jar:1.5.8.RELEASE] Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.claudiazeledon.LuckyLabsRescue.models.Picture.pictureURL references an unknown entity: java.net.URL at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:97) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1786) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1730) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1617) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE] ... 21 common frames omitted
Oh my!それは動作します!しかし、犬のテーブルのプライマリIDにpictureURLを割り当てることに成功するかどうか疑問に思いますか? – Claudia
@Claudiaはい、 'Dog'エンティティは' Dog'クラスで '@ ManyToOne'アノテーションを使用しているので、いくつかの' Picture'エンティティにリンクされます。 'pictureUrl'は' Picture'クラスの中にあるのでリンクされます。通常の '@ Column'アノテーションを必ず入れてください。 – ESala
ああ、私は 'Dog'クラスの' @ OneToMany'アノテーションの代わりに '@ ManyToOne'を使うことになっていましたか?私は '@ OneToMany'は1匹の犬がたくさんの写真を持っていることを意味しています。 問題が解決したら、私は間違いなく受け入れるでしょう!私は今これをテストしています。 – Claudia