Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Patrik Marýška:29.4.2018 15:25

Ahoj,

mohl bych poprosit o radu? Mapuji databázi v MySQL do JPA/Hibernate a nemůžu se dostat dál přes jeden vztah...
Zde jsou entity a metoda na volání

@Repository
public class HospRepository {
        @Autowired
        private EntityManager em;

        @Transactional
        public void test() {
                Patient p = em.find(Patient.class, "53-1169670");

                Medicine m = new Medicine("Dexoryl", "1-0-4", "Against Diarhoea");
                Price pr = em.find(Price.class, 2);

                pr.addMedicineForPrice(m);
                m.setPrice(pr);

                em.persist(m);
}
}
@Entity
@Table(name="medicine")
public class Medicine {

        @Id
        private int id;

        private String name;

        private String dose;

        private String description;

        @ManyToOne(cascade= {CascadeType.ALL})
        @JoinColumn(name="price_id")
        private Price price;

        @ManyToMany(mappedBy="medicines")
        private List<MedicalReport> medicalReports = new ArrayList<>();

        public Medicine(String name, String dose, String description) {
                super();
                this.dose = dose;
                this.name = name;
                this.description = description;
        }

        public Medicine() {

        }

        public int getId() {
                return id;
        }

        public String getDose() {
                return dose;
        }

        public void setDose(String dose) {
                this.dose = dose;
        }

        public void setId(int id) {
                this.id = id;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public String getDescription() {
                return description;
        }

        public void setDescription(String description) {
                this.description = description;
        }


        public void addMedicalReport(MedicalReport p) {
                medicalReports.add(p);
        }

        @Override
        public String toString() {
                return "Medicine [id=" + id + ", name=" + name + ", description=" + description +
                                 "]";
        }

        public Price getPrice() {
                return price;
        }

        public void setPrice(Price price) {
                this.price = price;
        }

        public List<MedicalReport> getMedicalReports() {
                return medicalReports;
        }

        public void setMedicalReports(List<MedicalReport> medicalReports) {
                this.medicalReports = medicalReports;
        }
}
@Entity
@Table(name="price")
public class Price {

        @Id
        private int id;

        private double sum;

        public Price(double sum) {
                super();
                this.sum = sum;
        }

        @OneToMany(mappedBy="price", cascade= {CascadeType.ALL})
        private List<Medicine> medicines = new ArrayList<>();

        public Price() {

        }

        public double getSum() {
                return sum;
        }

        public void setSum(double sum) {
                this.sum = sum;
        }

        public List<Medicine> getMedicines() {
                return medicines;
        }

        public void setMedicines(List<Medicine> medicines) {
                this.medicines = medicines;
        }

        public void addMedicineForPrice(Medicine m) {
                medicines.add(m);
        }

        @Override
        public String toString() {
                return "Price [sum=" + sum + "]";
        }

        public int getId() {
                return id;
        }

        public void setId(int id) {
                this.id = id;
        }
}

A chyba:
Caused by: java.sql.SQLEx­ception: Cannot add foreign key constraint
at com.mysql.jdbc­.SQLError.cre­ateSQLExcepti­on(SQLError.ja­va:965) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.MysqlIO.chec­kErrorPacket(Mys­qlIO.java:3976) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.MysqlIO.chec­kErrorPacket(Mys­qlIO.java:3912) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.MysqlIO.sendCom­mand(MysqlIO.ja­va:2530) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.MysqlIO.sqlQu­eryDirect(Mys­qlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.ConnectionIm­pl.execSQL(Con­nectionImpl.ja­va:2482) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.ConnectionIm­pl.execSQL(Con­nectionImpl.ja­va:2440) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.StatementImpl­.executeInter­nal(StatementIm­pl.java:845) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.mysql.jdbc­.StatementImpl­.execute(State­mentImpl.java:745) ~[mysql-connector-java-5.1.46.jar:5.1.46]
at com.zaxxer.hi­kari.pool.Pro­xyStatement.e­xecute(ProxyS­tatement.java:95) ~[HikariCP-2.7.8.jar:na]
at com.zaxxer.hi­kari.pool.Hika­riProxyStatemen­t.execute(Hika­riProxyStatemen­t.java) ~[HikariCP-2.7.8.jar:na]
at org.hibernate­.tool.schema.in­ternal.exec.Ge­nerationTarget­ToDatabase.ac­cept(Generati­onTargetToData­base.java:54) ~[hibernate-core-5.2.16.Final.jar:5­.2.16.Final]
... 38 common frames omitted

Mockrát děkuji za pomoc a přeji hezký den :-)

Editováno 29.4.2018 15:27
 
Odpovědět
29.4.2018 15:25
Avatar
Petr
Člen
Avatar
Petr:2.5.2018 2:37

To vypada, ze se hibernate snazi upravit schema podle entit. Mrkni jestli ti sedi nazvy tabulek a sloupcu s tim co mas v entitach, jako prvni zkontroluj jestli sedi tohle: @JoinColumn(na­me="price_id")

 
Nahoru Odpovědět
2.5.2018 2:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.