Hi.
I need second level cache for many-to-many association and in -persistence.xml- orm.xml I only found this setting for entire entity or for natural ID.
The annotation @org.hibernate.annotations.Cache can be applied to java getter metod, but I don’t use annotations (the java code below is annotated, but only to explain what I need) . The java property in question is “LVAItem_LVAType”
<entity name="AvatarClient.LVAItem" class="bpemain.entities.avatarclient.DbLVAItem" cacheable="true">
<table name="avatarclient$lvaitem"/>
<caching access="READ_ONLY"/>
<mutable>false</mutable>
<attributes>
<id name="id">
<column name="id"/>
</id>
<basic name="obsolete">
<column name="obsolete"/>
</basic>
<basic name="iden">
<column name="iden"/>
</basic>
<basic name="sortKey">
<column name="sortkey"/>
</basic>
<basic name="term">
<column name="term"/>
</basic>
<basic name="code">
<column name="code"/>
</basic>
<many-to-many name="LVAItem_LVAType">
<join-table name="avatarclient$lvaitem_lvatype">
<join-column name="avatarclient$lvaitemid"/>
<inverse-join-column name="avatarclient$lvatypeid"/>
</join-table>
</many-to-many>
</attributes>
</entity>
_
@Entity(name = "AvatarClient.LVAItem")
@Table(name = "avatarclient$lvaitem")
@Immutable
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class DbLVAItem {
public final java.util.Map<java.lang.String, java.lang.Object> members =
new java.util.HashMap<>();
@Id
@Column(name = "id")
public long getId() {
return (long) this.members.get("id");
}
public void setId(final long val) {
this.members.put("id", val);
}
@Basic
@Column(name = "code")
public java.lang.String getCode() {
return (java.lang.String) this.members.get("Code");
}
public void setCode(final java.lang.String val) {
this.members.put("Code", val);
}
@Basic
@Column(name = "iden")
public java.lang.Long getIden() {
return (java.lang.Long) this.members.get("Iden");
}
public void setIden(final java.lang.Long val) {
this.members.put("Iden", val);
}
@Basic
@Column(name = "obsolete")
public java.lang.Boolean getObsolete() {
return (java.lang.Boolean) this.members.get("Obsolete");
}
public void setObsolete(final java.lang.Boolean val) {
this.members.put("Obsolete", val);
}
@Basic
@Column(name = "sortkey")
public java.lang.Integer getSortKey() {
return (java.lang.Integer) this.members.get("SortKey");
}
public void setSortKey(final java.lang.Integer val) {
this.members.put("SortKey", val);
}
@Basic
@Column(name = "term")
public java.lang.String getTerm() {
return (java.lang.String) this.members.get("Term");
}
public void setTerm(final java.lang.String val) {
this.members.put("Term", val);
}
@ManyToMany
@JoinTable(
name = "avatarclient$lvaitem_lvatype",
joinColumns = @JoinColumn(name = "avatarclient$lvaitemid"),
inverseJoinColumns = @JoinColumn(name = "avatarclient$lvatypeid"))
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public java.util.Set<bpemain.entities.avatarclient.DbLVAType> getLVAItem_LVAType() {
return (java.util.Set<bpemain.entities.avatarclient.DbLVAType>) this.members
.get("AvatarClient.LVAItem_LVAType");
}
public void setLVAItem_LVAType(
final java.util.Set<bpemain.entities.avatarclient.DbLVAType> val) {
this.members.put("AvatarClient.LVAItem_LVAType", val);
}
}