【问题标题】:Persisting Entities Mapped to MySQL View in JPA/Hibernate在 JPA/Hibernate 中持久化映射到 MySQL 视图的实体
【发布时间】:2013-04-17 11:08:02
【问题描述】:

我有一个实体 Customer,它映射到一个视图,该视图定义为我的数据库中 Customer、Account 和 Person 之间的一系列连接。

我使用 JSF 2.0 和 Hibernate 设置的 JPA。后备数据库是 MySQL

我的问题是,鉴于我的客户实体已映射到数据库视图这一事实,这会使新客户实体的持久化变得多么复杂?

【问题讨论】:

    标签: mysql hibernate jpa orm


    【解决方案1】:

    我引用 Adam Bien 的书:

    “对于 SQL 查询,视图和表之间没有区别,因此您可以轻松地将 JPA 实体透明地映射到视图。Java 端的代码保持简洁 – 您甚至可以获得更好的性能。有缺点:并非所有视图都是可更新的。视图是否可更新很大程度上取决于复杂性和特定数据库。例如,在 Derby DB 中,所有视图都不可更新。"

    http://www.dzone.com/links/r/mapping_jpa_entities_to_sql_views_it_works_even_w.html

    【讨论】:

    • 所以在我尝试之前我可能不知道我的视图是否可以更新,本质上?但理论上它应该不会造成问题?
    • 我今天刚刚更新了一个带有 oracle 数据库的视图中的值,它起作用了
    • 我已尝试设置视图,但无法为实体 ID 设置 @GeneratedValue,但出现错误“无法构建 EntityManagerFactory [...] 原因:java.io .IOException: Broken pipeCaused by: java.io.IOException: Broken pipe" 所以我假设我需要在直接映射到数据库表的实体中生成 ID,然后通过视图进行更新,不是吗? (对不起,我是这个数据库的新手)
    • 使用 MySQL,我有一个模型映射到一个简单的 SELECT * FROM model_table 视图,modelDAO.save(model) 更新了视图以及底层的 model_table ... 对我来说似乎很奇怪跨度>
    猜你喜欢
    • 2012-04-06
    • 2018-04-30
    • 2015-03-13
    • 2012-07-04
    • 2011-09-22
    • 2010-12-30
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多