【问题标题】:How to map unknown columns using Hibernate?如何使用 Hibernate 映射未知列?
【发布时间】:2022-11-14 19:02:02
【问题描述】:

我有一个不时获取或删除列的数据库。如果事先不知道列名和数据类型,是否可以使用 Hibernate 映射这些列?就像是:

@Entity
@Table(name = "some_table")
public class SomeTable {
    @Id
    @GeneratedValue(strategy = GenerationType.Entity)
    private String id;

    // private List<Object> fields;
}

【问题讨论】:

  • 您将如何处理这些未映射的列?
  • 将它们返回给调用 API 的客户端
  • 我不这么认为

标签: java hibernate


【解决方案1】:

好吧...通常您不会在没有数据库模式的情况下使用 Hibernate。这取决于你想做什么。

但是,Hibernate supports dynamic models:

您通过 XML 定义实体:

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class entity-name="Book">
        <id name="isbn" column="isbn" length="32" type="string"/>

        <property name="title" not-null="true" length="50" type="string"/>

        <property name="author" not-null="true" length="50" type="string"/>

    </class>
</hibernate-mapping>

启用对它的支持:

hibernate.default_entity_mode=true

现在你使用这个:

Map<String, String> book = new HashMap<>();
book.put( "isbn", "978-9730228236" );
book.put( "title", "High-Performance Java Persistence" );
book.put( "author", "Vlad Mihalcea" );

// Not standard JPA, you need to use the Hibernate session
entityManager
    .unwrap(Session.class)
    .save( "Book", book );

确保查看 Hibernate ORM 文档以获取更多详细信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2011-02-17
    • 2017-01-29
    • 2019-06-28
    • 1970-01-01
    相关资源
    最近更新 更多