LINUX.ORG.RU

Генератор сущностей Javax.presistence из базы данных

 , , ,


0

1

Есть что-то такое и как оно называется? В идеале cli и чтобы сразу оборачивало в какой-нибудь rest сервис. Крайне желательно СПО.

★★★★★

Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от bvn13

https://www.jooq.org/

Examples

create.select(BOOK.TITLE)
      .from(BOOK)
      .where(BOOK.PUBLISHED_IN.eq(2011))
      .orderBy(BOOK.TITLE)

Я не уверен, что это то, что нужно, тем более проприетарщина.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от bvn13

Ну, как бы да, но я не осиливаю этот мануал с картинками. У меня какие-то ошибки, а я даже текст оттуда скопировать не могу. Есть что-нибудь, чтобы на вход сунуть конфиг, запустить и чтобы оно просто написало сорцы.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

https://shekhargulati.com/2018/01/09/programmatically-generating-database-sch...

https://antoniogoncalves.org/2014/12/11/generating-database-schemas-with-jpa-...

http://www.javarticles.com/2015/06/generating-database-schema-using-hibernate...

как я понял, там нужно коннект настроить да выполнить

public static void main(String[] args) {
    Persistence.generateSchema("samplePU", null);
  }

bvn13 ★★★★★
()
Последнее исправление: bvn13 (всего исправлений: 1)
Ответ на: комментарий от bvn13

schemaExport.setOutputFile(«hbm2schema.sql»);

Не, мне надо наоборот. Чтобы из существующей базы данных получить кучу java классов.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от hippi90

Да там херня какая-то лезит, мануалы с картинками, бредовые окошечки с крестиками, короче блевать меня тянет от этих сраных ide. Смотрю в сторону Celerio.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Ну продолжай дальше жрать говно, тебе предложили рабочий инструмент, но нет, тру-программисты не пользуются IDE, только хардкор.

hippi90 ★★★★★
()

Задача в общем случае нереализуемая. Как такой генератор должен угадать где у тебя и какие отношения между сущностями? Да и named query никто тебе за тебя не сочинит.

morse ★★★★★
()
Ответ на: комментарий от morse

Как такой генератор должен угадать где у тебя и какие отношения между сущностями?

В базе foregin keys, а где их нет - я допишу. Ну или можно какой-нибудь json и поправить схему после импорта из бд.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Чувак, я бы на твоем месте к врачу сходил, у тебя явно завышенный радиус кривизны рук, пусть поправит. Все пользуются, у всех всё работает, и только у тебя срёт эксепшенами.

hippi90 ★★★★★
()
Ответ на: комментарий от hippi90

Мне немного не до разбирательств в том, почему именно этот эклипс так себя ведёт. Чего у тебя так пригорело с этого?

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Расскажи, как по ключу отличить one-to-one от many-to-one? Заодно расскажи как отличить маповую сущность many-to-many от нормальной сущности с двумя ключами, и как угадать какой сущности какой сопоставить генератор идентификаторов.

morse ★★★★★
()
Ответ на: комментарий от crutch_master

0 - не, не проприетарщина. https://github.com/jOOQ/jOOQ
1 - В платных версиях поддержка только всяких ораклов и прочего кровавого энтерпрайза.
2 - Можешь пользоваться только генератором сущностей и не пользоваться DAO-dsl. Сущности можно генерить с javax аннотациями. Внешние связи строить не будет. Но если у тебя 150 таблиц, с которых нужно генерить классы, то решение вполне удобное.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от morse

one-to-one от many-to-one

По уникальности индекса

Заодно расскажи как отличить маповую сущность many-to-many

Зачем их отличать? У m-t-m связь - два неуникальных поля, а два ключа - это вообще другой индекс.

генератор идентификаторов

В оракле/pg есть sequence, остальные сами себе поставят какие надо.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Ну ок, спасибо. Гляну если ничего не получится с celerio

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

По уникальности индекса

А если индекс не уникален? Ни о чем не говорит.

Зачем их отличать?

Затем что в общем случае для мапы собственная сущность не нужна, jpa provider ее сам разрулит. Но иногда мы таки хотим иметь к ней прямой доступ.

В оракле/pg есть sequence

Знаю что есть. И как ты собрался автоматически сопоставлять сиквенсы с сущностями?

morse ★★★★★
()
Ответ на: комментарий от morse

Знаю что есть. И как ты собрался автоматически сопоставлять сиквенсы с сущностями?

Там аннотация есть - брать id из sequence
Скажи лучше, как java -cp сделать и почему она хер кладёт на этот параметр.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от Deleted

Caused by: java.lang.ClassNotFoundException: org.jooq.meta.oracle.OracleDatabase
- You want to use a commercial jOOQ Edition, but you pulled the Open Source Edition from Maven Central.

Понятно всё короче. Зря время только потратил. Да и она не генерит классы, это инструмент для превращения ява кода в sql портянки.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

В платных версиях поддержка только всяких ораклов и прочего кровавого энтерпрайза.

OracleDatabase
commercial jOOQ Edition

Я вроде как предупредил.

Да и она не генерит классы

        <generate>
            <immutablePojos>true</immutablePojos>
            <jpaAnnotations>true</jpaAnnotations>
        </generate>



/**
 * This class is generated by jOOQ
 */
package com.{skip}.common.model.gen.tables.pojos;


import java.io.Serializable;
import java.sql.Timestamp;

import javax.annotation.Generated;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;


/**
 * This class is generated by jOOQ.
 */
@Generated(
	value = {
		"http://www.jooq.org",
		"jOOQ version:3.7.3"
	},
	comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
@Entity
@Table(name = "es_schema", schema = "schema")
public class EsSchema implements Serializable {

	private static final long serialVersionUID = -2141966131;

	private final String    version;
	private final Timestamp createdAt;

	public EsSchema(EsSchema value) {
		//blah
	}

	public EsSchema(
		String    version,
		Timestamp createdAt
	) {
		//blah
	}

	@Id
	@Column(name = "version", unique = true, nullable = false, length = 50)
	public String getVersion() {
		return this.version;
	}

	@Column(name = "created_at", nullable = false)
	public Timestamp getCreatedAt() {
		return this.createdAt;
	}

	@Override
	public String toString() {
	//blah
	}
}




Вангую кривизну рук.

Deleted
()
Ответ на: комментарий от Deleted

Вангую кривизну рук.

Как будто я это когда-то сильно скрывал.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от Deleted

A : separated list of directories

Пробежался глазами и вообще не втянул то, что это ":" - separated. Она там стоит, как знак препинания.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Один хрен, работает только через jdbc и все поля у POJO - Object

crutch_master ★★★★★
() автор топика

В pom.xml в build/plugins добавь:

            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution> <!--start with mvn antrun:run@hbm2java -->
                        <id>hbm2java</id>
                        <phase>none</phase>
                        <configuration>
                            <target>
                                <property name="compile_classpath" refid="maven.compile.classpath"/>
                                <property name="runtime_classpath" refid="maven.runtime.classpath"/>
                                <property name="test_classpath" refid="maven.test.classpath"/>
                                <property name="plugin_classpath" refid="maven.plugin.classpath"/>

                                <echo message="Start generating entities..."/>
                                <taskdef name="hibernatetool"
                                         classname="org.hibernate.tool.ant.HibernateToolTask"/>
                                <hibernatetool
                                        destdir="src/main/java/">
                                    <classpath>
                                        <path location="${project.build.directory}/classes" />
                                    </classpath>
                                    <jdbcconfiguration
                                            revengfile="src/main/resources/hibernate.reveng.xml"
                                            packagename="com.mydomain"
                                            detectmanytomany="true"
                                            configurationfile="src/main/resources/hibernate.cfg.xml"
                                            reversestrategy="com.mydomain.MyReverseEngineeringStrategy"
                                    />
                                    <hbm2java jdk5="true" ejb3="true"/>
                                </hibernatetool>
                                <echo message="End generating entities."/>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-core</artifactId>
                        <version>${hibernate.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-entitymanager</artifactId>
                        <version>${hibernate.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.hibernate.common</groupId>
                        <artifactId>hibernate-commons-annotations</artifactId>
                        <version>${hibernate-annotations.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.hibernate.javax.persistence</groupId>
                        <artifactId>hibernate-jpa-2.1-api</artifactId>
                        <version>1.0.0.Final</version>
                    </dependency>
                    <dependency>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-tools</artifactId>
                        <version>${hibernate.version}</version>
                        <exclusions>
                            <exclusion>
                                <groupId>*</groupId>
                                <artifactId>*</artifactId>
                            </exclusion>
                        </exclusions>
                    </dependency>
                    <dependency>
                        <groupId>javax.transaction</groupId>
                        <artifactId>jta</artifactId>
                        <version>1.1</version>
                    </dependency>
                    <dependency>
                        <groupId>freemarker</groupId>
                        <artifactId>freemarker</artifactId>
                        <version>2.3.8</version>
                    </dependency>
                    <dependency>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>${postgresql.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                        <version>1.1</version>
                    </dependency>
                    <dependency>
                        <groupId>commons-collections</groupId>
                        <artifactId>commons-collections</artifactId>
                        <version>3.2.1</version>
                    </dependency>
                </dependencies>
            </plugin>
Командой mvn antrun:run@hbm2java ты получишь сгенерированные сущности, но увы, в аннотациях hibernate. Если найдешь способ генерирования сущностей в аннотациях JPA, дай знать. В моем случае все было сгенерировано как надо, связи таблиц определились точно.

totik
()
Последнее исправление: totik (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.