[英]Spring Data Jpa : Save method only returning select but not performing insert
I am trying to save/update an entity by using spring data JPA.我正在尝试使用 spring 数据 JPA 来保存/更新实体。 I have 2 entity which are almost similar.我有 2 个几乎相似的实体。 Both entities contain composite keys.两个实体都包含复合键。 Save method is working fine on one entity.保存方法在一个实体上运行良好。 Save method not working on another entity.保存方法不适用于另一个实体。 Insertion/update is not happening upon calling save
method.调用save
方法时不会发生插入/更新。 It is just returning select statement.它只是返回 select 语句。
Update / save works on ContentCoreNluRepository
在ContentCoreNluRepository
上更新/保存作品
But only select statements are returning from the repository RelationShipTypeRepository
但只有 select 语句从存储库RelationShipTypeRepository
返回
I am not sure where I am going wrong.我不确定我哪里出错了。
My code below.我的代码如下。
@SpringBootApplication
public class CdsRmsOutputDbApplication implements CommandLineRunner {
@Autowired
RelationShipTypeRepository relationShipTypeRepository;
@Autowired
ContentCoreNluRepository contentCoreNluRepository;
public static void main(String[] args) {
SpringApplication.run(CdsRmsOutputDbApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
RelationShipType relationShipType = new RelationShipType("TEJA_3059", "alias", "UUCID", "TEJA_3059", "N");
relationShipTypeRepository.saveAndFlush(relationShipType);
ContentCoreNlu contentCoreNlu = new ContentCoreNlu(4569l, "Topiccsq", "Analyticscqs", "Analytics", "N",
BigDecimal.valueOf(0.9999));
ContentCoreNlu contentCoreNlu1 = new ContentCoreNlu(4569l, "Topiccs", "Analyticscs", "Analytics", "N",
BigDecimal.valueOf(0.9999));
ContentCoreNlu contentCoreNlu2 = new ContentCoreNlu(4569l, "Topic", "Analytics", "Analytics", "N",
BigDecimal.valueOf(0.9999));
List<ContentCoreNlu> contentList = new ArrayList<>();
contentList.add(contentCoreNlu);
contentList.add(contentCoreNlu1);
contentList.add(contentCoreNlu2);
contentCoreNluRepository.saveAndFlush(contentCoreNlu);
}
}
Here is my Entity 1这是我的实体 1
@Entity
@Table(name = "content_core_relshp")
@IdClass(RelationShipTypeId.class)
@EntityListeners(AuditingEntityListener.class)
public class RelationShipType {
@Id
@Column(name = "universal_content_id")
private String universalContentId;
@Id
@Column(name = "relshp_type")
private String relationType;
@Id
@Column(name = "content_type_id")
private String contentTypeId;
@Id
@Column(name = "content_id")
private String contentId;
@Id
@Column(name = "inact_flg", columnDefinition = "char")
private String inactFlag;
@Column(name = "create_ts", updatable = false)
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
private java.util.Date createTs;
@Column(name = "updt_ts")
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
private java.util.Date updateTs;
/**
*
*/
public RelationShipType() {
super();
}
/**
* @param universalContentId
* @param relationType
* @param contentTypeId
* @param contentId
* @param inactFlag
*/
public RelationShipType(String universalContentId, String relationType, String contentTypeId, String contentId,
String inactFlag) {
super();
this.universalContentId = universalContentId;
this.relationType = relationType;
this.contentTypeId = contentTypeId;
this.contentId = contentId;
this.inactFlag = inactFlag;
}
public String getUniversalContentId() {
return universalContentId;
}
public String getRelationType() {
return relationType;
}
public String getContentTypeId() {
return contentTypeId;
}
public String getContentId() {
return contentId;
}
public String getInactFlag() {
return inactFlag;
}
public java.util.Date getCreateTs() {
return createTs;
}
public java.util.Date getUpdateTs() {
return updateTs;
}
@Override
public String toString() {
return "RelationShipType [universalContentId=" + universalContentId + ", relationType=" + relationType
+ ", contentTypeId=" + contentTypeId + ", contentId=" + contentId + ", inactFlag=" + inactFlag
+ ", createTs=" + createTs + ", updateTs=" + updateTs + "]";
}
}
I have composite key on my variables.我的变量上有复合键。
public class RelationShipTypeId implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String universalContentId;
private String relationType;
private String contentTypeId;
private String contentId;
private String inactFlag;
/**
*
*/
public RelationShipTypeId() {
super();
}
/**
* @param universalContentId
* @param relationType
* @param contentTypeId
* @param contentId
* @param inactFlag
*/
public RelationShipTypeId(String universalContentId, String relationType, String contentTypeId, String contentId,
String inactFlag) {
super();
this.universalContentId = universalContentId;
this.relationType = relationType;
this.contentTypeId = contentTypeId;
this.contentId = contentId;
this.inactFlag = inactFlag;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((contentId == null) ? 0 : contentId.hashCode());
result = prime * result + ((contentTypeId == null) ? 0 : contentTypeId.hashCode());
result = prime * result + ((inactFlag == null) ? 0 : inactFlag.hashCode());
result = prime * result + ((relationType == null) ? 0 : relationType.hashCode());
result = prime * result + ((universalContentId == null) ? 0 : universalContentId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
RelationShipTypeId other = (RelationShipTypeId) obj;
if (contentId == null) {
if (other.contentId != null)
return false;
} else if (!contentId.equals(other.contentId))
return false;
if (contentTypeId == null) {
if (other.contentTypeId != null)
return false;
} else if (!contentTypeId.equals(other.contentTypeId))
return false;
if (inactFlag == null) {
if (other.inactFlag != null)
return false;
} else if (!inactFlag.equals(other.inactFlag))
return false;
if (relationType == null) {
if (other.relationType != null)
return false;
} else if (!relationType.equals(other.relationType))
return false;
if (universalContentId == null) {
if (other.universalContentId != null)
return false;
} else if (!universalContentId.equals(other.universalContentId))
return false;
return true;
}
}
Here is my 2nd entity.这是我的第二个实体。
@Entity
@Table(name = "content_core_nlu")
@IdClass(ContentCoreNluId.class)
@EntityListeners(AuditingEntityListener.class)
public class ContentCoreNlu {
@Id
@Column(name = "urn_content_core_attrbt")
private Long urnContentCoreAttributeId;
@Id
@Column(name = "nlu_type")
private String nluType;
@Id
@Column(name = "nlu_cd")
private String nluCd;
@Column(name = "nlu_name")
private String nluName;
@Column(name = "inact_flg", columnDefinition = "char")
private String inactFlag;
@Column(name = "nlu_relevance")
private BigDecimal nluRelevance;
@Column(name = "create_ts", updatable = false)
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
private java.util.Date createTs;
@Column(name = "updt_ts")
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
private java.util.Date updateTs;
/**
*
*/
public ContentCoreNlu() {
super();
}
/**
* @param urnContentCoreAttributeId
* @param nluType
* @param nluCd
* @param nluName
* @param inactFlag
* @param d
*/
public ContentCoreNlu(Long urnContentCoreAttributeId, String nluType, String nluCd, String nluName,
String inactFlag, BigDecimal nluRelevance) {
super();
this.urnContentCoreAttributeId = urnContentCoreAttributeId;
this.nluType = nluType;
this.nluCd = nluCd;
this.nluName = nluName;
this.inactFlag = inactFlag;
this.nluRelevance = nluRelevance;
}
/**
* @param nluType
* @param nluCd
* @param nluName
* @param inactFlag
* @param nluRelevance
*/
public ContentCoreNlu(String nluType, String nluCd, String nluName, String inactFlag, BigDecimal nluRelevance) {
super();
this.nluType = nluType;
this.nluCd = nluCd;
this.nluName = nluName;
this.inactFlag = inactFlag;
this.nluRelevance = nluRelevance;
}
public Long getUrnContentCoreAttributeId() {
return urnContentCoreAttributeId;
}
public String getNluType() {
return nluType;
}
public String getNluCd() {
return nluCd;
}
public String getNluName() {
return nluName;
}
public String getInactFlag() {
return inactFlag;
}
public BigDecimal getNluRelevance() {
return nluRelevance;
}
public java.util.Date getCreateTs() {
return createTs;
}
public java.util.Date getUpdateTs() {
return updateTs;
}
@Override
public String toString() {
return "ContentCoreNlu [id=" + ", urnContentCoreAttributeId=" + urnContentCoreAttributeId + ", nluType="
+ nluType + ", nluCd=" + nluCd + ", nluName=" + nluName + ", inactFlag=" + inactFlag + ", nluRelevance="
+ nluRelevance + ", createTs=" + createTs + ", updateTs=" + updateTs + "]";
}
}
public class ContentCoreNluId implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Long urnContentCoreAttributeId;
private String nluType;
private String nluCd;
/**
*
*/
public ContentCoreNluId() {
super();
}
/**
* @param urnContentCoreAttributeId
* @param nluType
* @param nluCd
*/
public ContentCoreNluId(Long urnContentCoreAttributeId, String nluType, String nluCd) {
super();
this.urnContentCoreAttributeId = urnContentCoreAttributeId;
this.nluType = nluType;
this.nluCd = nluCd;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nluCd == null) ? 0 : nluCd.hashCode());
result = prime * result + ((nluType == null) ? 0 : nluType.hashCode());
result = prime * result + ((urnContentCoreAttributeId == null) ? 0 : urnContentCoreAttributeId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ContentCoreNluId other = (ContentCoreNluId) obj;
if (nluCd == null) {
if (other.nluCd != null)
return false;
} else if (!nluCd.equals(other.nluCd))
return false;
if (nluType == null) {
if (other.nluType != null)
return false;
} else if (!nluType.equals(other.nluType))
return false;
if (urnContentCoreAttributeId == null) {
if (other.urnContentCoreAttributeId != null)
return false;
} else if (!urnContentCoreAttributeId.equals(other.urnContentCoreAttributeId))
return false;
return true;
}
}
Here are my repository classes.这是我的存储库类。
public interface RelationShipTypeRepository extends JpaRepository<RelationShipType, RelationShipTypeId> {
}
public interface ContentCoreNluRepository extends JpaRepository<ContentCoreNlu, ContentCoreNluId> {
}
Here is my log这是我的日志
2020-06-11 22:22:26.693 INFO 58052 --- [ main] c.i.c.rms.db.CdsRmsOutputDbApplication : Starting CdsRmsOutputDbApplication on tejas-mbp.lan with PID 58052 (/Users/teja.kanduri/Documents/JavaPractice/cdsrmsdb/target/classes started by teja.kanduri in /Users/teja.kanduri/Documents/JavaPractice/cdsrmsdb) <br/>
2020-06-11 22:22:26.695 INFO 58052 --- [ main] c.i.c.rms.db.CdsRmsOutputDbApplication : No active profile set, falling back to default profiles: default <br/>
2020-06-11 22:22:27.160 INFO 58052 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode. <br/>
2020-06-11 22:22:27.200 INFO 58052 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 35ms. Found 2 JPA repository interfaces. <br/>
2020-06-11 22:22:27.707 INFO 58052 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) <br/>
2020-06-11 22:22:27.717 INFO 58052 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] <br/>
2020-06-11 22:22:27.717 INFO 58052 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.35] <br/>
2020-06-11 22:22:27.801 INFO 58052 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext <br/>
2020-06-11 22:22:27.801 INFO 58052 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1078 ms <br/>
2020-06-11 22:22:28.038 INFO 58052 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' <br/>
2020-06-11 22:22:28.073 INFO 58052 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] <br/>
2020-06-11 22:22:28.101 INFO 58052 --- [ task-1] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.15.Final <br/>
2020-06-11 22:22:28.173 INFO 58052 --- [ task-1] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.0.Final} <br/>
2020-06-11 22:22:28.297 INFO 58052 --- [ task-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... <br/>
2020-06-11 22:22:29.070 INFO 58052 --- [ task-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. <br/>
2020-06-11 22:22:29.078 INFO 58052 --- [ task-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.DB2Dialect <br/>
2020-06-11 22:22:29.823 INFO 58052 --- [ task-1] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] <br/>
2020-06-11 22:22:29.827 INFO 58052 --- [ task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' <br/>
2020-06-11 22:22:30.114 WARN 58052 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning <br/>
2020-06-11 22:22:30.666 INFO 58052 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' <br/>
2020-06-11 22:22:30.668 INFO 58052 --- [ main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories… <br/>
2020-06-11 22:22:30.714 INFO 58052 --- [ main] DeferredRepositoryInitializationListener : Spring Data repositories initialized! <br/>
2020-06-11 22:22:30.720 INFO 58052 --- [ main] c.i.c.rms.db.CdsRmsOutputDbApplication : Started CdsRmsOutputDbApplication in 4.273 seconds (JVM running for 4.59)
Hibernate: select relationsh0_.content_id as content_1_1_0_, relationsh0_.content_type_id as content_2_1_0_, relationsh0_.inact_flg as inact_fl3_1_0_, relationsh0_.relshp_type as relshp_t4_1_0_, relationsh0_.universal_content_id as universa5_1_0_, relationsh0_.create_ts as create_t6_1_0_, relationsh0_.updt_ts as updt_ts7_1_0_ from CDS.content_core_relshp relationsh0_ where relationsh0_.content_id=? and relationsh0_.content_type_id=? and relationsh0_.inact_flg=? and relationsh0_.relshp_type=? and relationsh0_.universal_content_id=? <br/>
Hibernate: select contentcor0_.nlu_cd as nlu_cd1_0_0_, contentcor0_.nlu_type as nlu_type2_0_0_, contentcor0_.urn_content_core_attrbt as urn_cont3_0_0_, contentcor0_.create_ts as create_t4_0_0_, contentcor0_.inact_flg as inact_fl5_0_0_, contentcor0_.nlu_name as nlu_name6_0_0_, contentcor0_.nlu_relevance as nlu_rele7_0_0_, contentcor0_.updt_ts as updt_ts8_0_0_ from CDS.content_core_nlu contentcor0_ where contentcor0_.nlu_cd=? and contentcor0_.nlu_type=? and contentcor0_.urn_content_core_attrbt=? <br/>
Hibernate: update CDS.content_core_nlu set inact_flg=?, nlu_name=?, nlu_relevance=?, updt_ts=? where nlu_cd=? and nlu_type=? and urn_content_core_attrbt=?
Here are my application properties这是我的应用程序属性
-spring.data.jpa.repositories.enabled=true
-spring.datasource.url=****
-spring.jpa.properties.hibernate.default_schema=****
-spring.datasource.username=****
-spring.datasource.password=****
-spring.jpa.show-sql=true
-spring.jpa.hibernate.ddl-auto=none
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2Dialect
-spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
-spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
-spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Spring data is performing hibernate merge when entity is assumed as "not new" (see: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.entity-persistence.saving-entites.strategies ). Spring data is performing hibernate merge when entity is assumed as "not new" (see: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.entity-persistence.saving -entites.strategies )。 Merge doesn't execute update if entity was not changed.如果实体未更改,则合并不会执行更新。 It seems that you already have relationShipType
entity with the same identifier in DB and it is equal to the entity you're try to update.似乎您已经在 DB 中拥有具有相同标识符的relationShipType
实体,并且它等于您尝试更新的实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.