- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个一对一的关系 Media
实体和 MediaAnalysis
实体所在Media
实体是一个抽象基类:
新闻报道实体
@Entity
@DiscriminatorValue("N")
public class NewsReport extends Media {
@Column(name = "BODY", nullable = false)
private String body;
NewsReport(){}
public NewsReport(String title, String link, String author, String body) {
super(title, link, author);
this.body= body;
}
public String getBody() {
return body;
}
}
@Entity
@Inheritance(
strategy = InheritanceType.SINGLE_TABLE
)
@DiscriminatorColumn(name = "TYPE", length = 1, discriminatorType = DiscriminatorType.STRING)
public abstract class Media {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
@Column(name = "TITLE", nullable = false)
private String title;
@Column(name = "LINK", length = 500, nullable = false)
private String link;
@Column(name = "AUTHOR", length = 45, nullable = false)
private String author;
@OneToOne(mappedBy = "media")
private MediaAnalysis analysis;
Media(){}
public Media(String title, String link, String author) {
this.title = title;
this.link = link;
this.author = author;
}
// getters
public Optional<MediaAnalysis> getAnalysis() {
return Optional.ofNullable(analysis);
}
}
@Entity
public class MediaAnalysis {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
@Column(name = "SUCCESS", nullable = false)
private Boolean success;
@OneToOne
@JoinColumn(
name = "MED_ID",
nullable = false,
foreignKey = @ForeignKey(name="MEA_MED_FK")
)
private Media media;
@Column(name = "CONTENT", nullable = false)
private String content;
MediaAnalysis() { }
public MediaAnalysis(Media media, Boolean success, String content) {
this.media = media;
this.success = success;
this.content = content;
}
// getters
public Media getMedia() {
return media;
}
public String getContent() {
return content;
}
}
AnalysisRepository.getByMedia(..a NewsReport...)
public interface AnalysisRepository extends JpaRepository<MediaAnalysis,Long> {
@Query("SELECT a FROM MediaAnalysis a LEFT JOIN FETCH a.media WHERE a.media = ?1")
Optional<MediaAnalysis> getByMedia(Media media);
}
MediaAnalysis
来自
NewsReport
例如,我希望 hibernate 运行单个
SELECT
查询,例如:
SELECT m.* from mediaanalysis m where m.med_id = ?
DEBUG o.h.SQL:92 - select mediaanaly0_.id as id1_0_0_, media1_.id as id2_1_1_, mediaanaly0_.med_id as med_id3_0_0_, mediaanaly0_.success as success2_0_0_, media1_.author as author3_1_1_, media1_.link as link4_1_1_, media1_.title as title5_1_1_, media1_.body as body6_1_1_, media1_.type as type1_1_1_ from mea_media_analysis mediaanaly0_ left outer join med_media media1_ on mediaanaly0_.med_id=media1_.id where mediaanaly0_.med_id=?
TRACE o.h.t.d.s.BasicBinder:65 - binding parameter [1] as [BIGINT] - [1]
DEBUG o.h.SQL:92 - select mediaanaly0_.id as id1_0_1_, mediaanaly0_.med_id as med_id3_0_1_, mediaanaly0_.success as success2_0_1_, media1_.id as id2_1_0_, media1_.author as author3_1_0_, media1_.link as link4_1_0_, media1_.title as title5_1_0_, media1_.body as body6_1_0_, media1_.type as type1_1_0_ from mea_media_analysis mediaanaly0_ inner join med_media media1_ on mediaanaly0_.med_id=media1_.id where mediaanaly0_.med_id=?
TRACE o.h.t.d.s.BasicBinder:65 - binding parameter [1] as [BIGINT] - [1]
MediaAnalysis
正如预期的那样,但是还有一个似乎没有必要的其他查询。我能分辨出这两个查询之间的唯一区别是连接类型。我认为问题与
Media
有关遗产。
@Query
从我的存储库中实际上有
三 查询!。
DEBUG o.h.SQL:92 - select mediaanaly0_.id as id1_0_, mediaanaly0_.med_id as med_id3_0_, mediaanaly0_.success as success2_0_ from mea_media_analysis mediaanaly0_ left outer join med_media media1_ on mediaanaly0_.med_id=media1_.id where media1_.id=?
TRACE o.h.t.d.s.BasicBinder:65 - binding parameter [1] as [BIGINT] - [1]
DEBUG o.h.SQL:92 - select media0_.id as id2_1_0_, media0_.author as author3_1_0_, media0_.link as link4_1_0_, media0_.title as title5_1_0_, media0_.body as body6_1_0_, media0_.type as type1_1_0_, mediaanaly1_.id as id1_0_1_, mediaanaly1_.med_id as med_id3_0_1_, mediaanaly1_.success as success2_0_1_ from med_media media0_ left outer join mea_media_analysis mediaanaly1_ on media0_.id=mediaanaly1_.med_id where media0_.id=?
TRACE o.h.t.d.s.BasicBinder:65 - binding parameter [1] as [BIGINT] - [1]
DEBUG o.h.SQL:92 - select mediaanaly0_.id as id1_0_1_, mediaanaly0_.med_id as med_id3_0_1_, mediaanaly0_.success as success2_0_1_, media1_.id as id2_1_0_, media1_.author as author3_1_0_, media1_.link as link4_1_0_, media1_.title as title5_1_0_, media1_.body as body6_1_0_, media1_.type as type1_1_0_ from mea_media_analysis mediaanaly0_ inner join med_media media1_ on mediaanaly0_.med_id=media1_.id where mediaanaly0_.med_id=?
TRACE o.h.t.d.s.BasicBinder:65 - binding parameter [1] as [BIGINT] - [1]
最佳答案
我没有使用 JpaRepository 的经验,只是(很多)使用 Hibernate(主要是 CriteriaBuilder),但有一些想法:
@OneToOne
仅在两个实体之一中(根据您的示例应该是 MediaAnalysis)MediaAnalysis
作为 1:n 关系(好像每个媒体可能有多个 MediaAnalysis
,这很可能在我的理解中,只是可能不在您的域中)。 关于spring - JPA 一对一映射与继承 : 2 Queries for what should be one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48169664/
我在使用一对一映射时遇到问题。我搜索了互联网并找到了许多解决方案,但没有一个令人满意。大多数示例都带有将父实例存储在子类中的开销。 我只想在具有外键约束关系的子类中使用父 ID,但不想在子类中保留任何
我有以下设置: Micronaut 3.x Java 15 我要更新的实体: @Setter @Getter @Entity @ToString @Table(name = "single_choic
我正在使用AVAudioPlayer制作MP3播放器。我有多种MP3声音,想一一播放。以下是我的应用程序的逻辑: ///// For playing 1st sound mp3Player = [[A
所以这就是问题所在。我有 2 个模型: 裁判级别和裁判 两个都有: class RefereeLevel(models.Model): level = models.PositiveSmall
我想将数组添加到列表或多维数组(不是一次全部...)。但是我真的不明白为什么这应该那么难。 可以说我有这个: string[] a = { "h", "b"}; string[] b
我有一个长度为 1000 的数字序列,我将其分成 100 个长度的序列。所以我最终得到了 901 个长度为 100 的序列。让前 900 个序列为 trainX。 trainY 是这些序列中的第 2
关键字:association 一对一映射(一个班级只有一个班主任) ?
所以,这是我第一次学习计算机语言。我选择了python和django。现在,我了解了 python 和 django 的许多基本概念。我可以使用 View 和所有其他内容创建新页面。但我仍然对这些关系
在一对一映射中,我编写了以下代码行。 @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Paramet
我有两个如下所示的实体 @Data @EqualsAndHashCode(callSuper = true) @Entity @Table(name = "foo") @Audited @AuditO
我的问题很简单.. 假设有 2 个类..书籍和作者 假设一本书只能由一位作者撰写。 一个作家可以写很多本书。 假设作者有唯一的名字。 [两个作者不能同名] 现在..假设所有 hibernate\JPA
我正在尝试创建一个实体,如下所示 @Data public class Person { @Id private String id; @OneToMany(mapp
我有一个包含字段的Project表 ID PROJECT_BASELINE_ATTRIBUTES_ID (FK for table PROJECT_BASELINE_ATTR) 这个表有如下映射
我正在学习基本的 hibernate 教程。我正在尝试在 2 个表之间建立一对一的关系。当我尝试插入 Client 表时它起作用了,但是当我尝试做相反的事情时(插入 Facture 表)我得到了这个异
我已经在 hibernate 3 中使用注释完成了一对一映射,我有两张表“组”和“类别”。类别是预定义的。当用户选择类别和组时,CategoryId和goupid应该只插入组表中。 那么应该如何映射。
我使用Linux服务Fedora 4.14.33-51.37.amzn1.x86_64。我想使用 NAT 1 对 1。例如是否相同problem我的方案是:我的服务器有两个网络接口(interface
我正在尝试与实体 Revision 创建一对一、自引用、双向关系(哇),看起来像这个: /** * @Entity() * @Table(name="rev") */ class Revisio
我需要两个实体之间的链接,所以我使用一对一 @Entity @Table(name = "T_USER") public class User implements Serializable {
一对一: 一对一的关系极为一个数据仅对应一个数据,用下图的结构图可以帮助理解: 下面用代码实现一下,首先要创建工程项目如下: 接着,我们定义模型: 来到models.py文件,创建两
假设我有5列。 pd.DataFrame({ 'Column1': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'Column2': [4, 3, 6, 8, 3, 4, 1, 4, 3
我是一名优秀的程序员,十分优秀!