我正在尝试使用复合主键类使用 Spring Data Cassandra。但是当我尝试查询数据时出现异常:
org.springframework.data.repository.query.QueryCreationException: **Could not create query for public abstract java.util.List com.amdocs.cassandrapoc.repository.ServiceRepository.findByKey(com.amdocs.cassandrapoc.entities.Key)! Reason: Cannot use composite primary key directly. Reference a property of the composite primary key**
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
@PrimaryKeyClass
public class Key implements Serializable {
@PrimaryKeyColumn(name = "id", ordinal = 0, type =
PrimaryKeyType.PARTITIONED)
@CassandraType(type = DataType.Name.UUID)
private UUID id;
@PrimaryKeyColumn(name = "tenant", ordinal = 1, type =
PrimaryKeyType.PARTITIONED)
@CassandraType(type = DataType.Name.TEXT)
private String tenant;
(Equals, hashcode, getters, setters omitted)
}
Table(value = "service")
public class Service implements …Run Code Online (Sandbox Code Playgroud) java composite-key cassandra spring-data spring-data-cassandra
我面临一个关于如何管理特定模型的映射的问题。
这是一个多租户应用,我们已经选择了在每个实体中都包含“tenant_id”,所以我们不必每次需要获取实体时都进行联合(实际上,这就是我问题的根源……)。
模型如下:
+--------------------+ +---------------+
| Book | | Author |
+--------------------+ +---------------+
| id (pk) | | id (pk) |
| tenant_id (pk)(fk) | | tenant_id (pk |
| author_id (fk) | | name |
| title | +---------------+
+--------------------+
Run Code Online (Sandbox Code Playgroud)
如您所见,tenant-id 位于每个实体中,并且是主键的一部分。我们使用@IdClass 来管理复合键。这是代码:
+--------------------+ +---------------+
| Book | | Author |
+--------------------+ +---------------+
| id (pk) | | id (pk) |
| tenant_id (pk)(fk) | | tenant_id (pk |
| author_id (fk) | | name |
| title | …Run Code Online (Sandbox Code Playgroud) @Embeddable
public class AccountTransactionId implements Serializable {
private String trxDate;
private String acctNo;
private int trxNo;
}
@Entity
public class Transaction {
@EmbeddedId
private AccountTransactionId accountTransactionId;
private int amt;
private int fee;
private String cancelYn;
}
Run Code Online (Sandbox Code Playgroud)
这是我的存储库。如何制作find方法?我对此一无所知
List<Map<String, Object>> findByAccountTransactionId_trxDate(String trxDate);
Run Code Online (Sandbox Code Playgroud)
我尝试了“findByAccountTransactionId_trxDate”、“findByAccountTransactionIdTrxDate”、“findByIdTrxDate”...
我正在尝试使用nHibernate将存储过程的输出映射到项目中的对象.
该对象是这样的:
public class NewContentSearchResult
{
public string Name { get; set; }
public string ContentType { get; set; }
public int Count { get; set; }
public int CMIId { get; set; }
public int FeatureId { get; set; }
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
并且映射看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Class.Assembly"
namespace="Class.Assembly"
default-lazy="false" default-cascade="none">
<class name="NewContentSearchResult" mutable="false" check="none">
<composite-id unsaved-value="none">
<key-property name="CMIId" type="int" /> …Run Code Online (Sandbox Code Playgroud) 我有一个带有复合键的遗留表,映射到其他3个表,因为这个表中有其他属性,因为它不是一个简单的映射表,我不能使用多对多集映射来映射这个.
以下是我所做的:
<class name="classA" table="A">
<composite-id name="ID" class="AKey">
<key-many-to-one name="Id_one" class="One" column="Id_one" />
<key-many-to-one name="Id_two" class="Two" column="Id_two" />
<key-many-to-one name="Id_three" class="Three" column="Id_three" />
</composite-id>
Run Code Online (Sandbox Code Playgroud)
AKey只是一个包含三个id的结构,Id_one,Id_two和Id_three都在各自的类中定义为int.
public struct Akey {
public int Id_one { get; set; }
public int Id_two { get; set; }
public int Id_three { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这编译很好,但是当我尝试运行它时,它会给我一个错误信息:
NHibernate.QueryException:NHibernate.Criterion.SimpleExpression中的类型不匹配:ID期望类型AKey,实际类型System.Int32
请告知我做错了什么或错过了什么.
谢谢你!
C#:我有一组对象.T有2个属性.属性A和属性B.此集合需要遵守的规则是A和B的值组合在集合中必须是唯一的.换句话说,A和B需要用作复合主键.
在Linq有一个操作我可以用来检查这种情况吗?我希望它会像
if (items.Select(x => x.Name).Distinct().Count() != items.Select(x => x.Name).Count())
Run Code Online (Sandbox Code Playgroud)
上面的陈述是我如何检查集合中是否有重复名称的项目,但我不知道如何为多个属性执行此操作.
A primary key is an attribute or set of attributes that uniquely identifies a row in a table. But a primary key has not only to be unique, but also minimal. Why is that necessary?
假设我有一个包含以下字段的表:
联盟将举办许多比赛.通常每个联盟都将使用自己的本地数据库,因此LeagueID字段在此本地数据库的所有记录中都是相同的.联盟每年一次将其数据上传到国家当局,然后联盟ID将有必要对具有相同MatchID的比赛进行识别.
实现复合主键的最佳方法是什么(使用EF Fluent API)?
Entity<Match>.HasKey(match=>new {match.LeagueID,match.MatchID})
Run Code Online (Sandbox Code Playgroud)
要么
Entity<Match>.HasKey(match=>new {match.MatchID,match.LeagueID})
Run Code Online (Sandbox Code Playgroud)
对于人眼来说,联盟 - 比赛的顺序是合乎逻辑的,因为它将把特定联盟的比赛保持在一起.但我明白,在编写复合键时,出于性能原因首先使用最具辨别力的字段非常重要.
database-design entity-framework composite-key entity-framework-5
我试图弄清楚如何使MVC脚手架使用复合/复合键.
我有下表:
public class Data
{
[Key, Column(Order = 0)]
[ForeignKey("Note")]
[Display(Name = "Note id")]
public int NoteId { get; set; }
[Key, Column(Order = 1)]
[ForeignKey("Member")]
[Display(Name = "Member id")]
public int MemberId { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
[Display(Name = "Note")]
public virtual Note Note { get; set; }
[Display(Name = "Member")]
public virtual Member Member { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我执行脚手架的行时:
Scaffold Controller Data -Repository
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Get-PrimaryKey : Cannot …Run Code Online (Sandbox Code Playgroud) asp.net-mvc entity-framework scaffolding composite-key ef-code-first
我尝试登录时遇到以下错误:
Project.Model.Identity.UserLogin :: EntityType'UserLogin'没有定义键.定义此EntityType的键.UserLogins:EntityType:EntitySet'UserLogins'基于没有定义键的'UserLogin'类型.
我试图在我的dbcontext中使用复合键
// Primary Key
this.HasKey(t => new { t.LoginProvider, t.ProviderKey, t.UserId });
Run Code Online (Sandbox Code Playgroud)
但它似乎无法选择它,看起来它正在搜索模型中的键而不是在上下文中,因为当我在模型中添加"[Key]"关键字时,它抱怨必须使用HasKey复合键
public partial class UserLogin
{
[Key]
public string LoginProvider { get; set; }
[Key]
public string ProviderKey { get; set; }
[Key]
public string UserId { get; set; }
public virtual User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我如何通过这个?我是否在模型中添加了HasKey,如果是这样,为什么不在上下文中添加它?
composite-key ×10
c# ×2
hibernate ×2
java ×2
nhibernate ×2
spring-data ×2
asp.net-mvc ×1
cassandra ×1
database ×1
embeddable ×1
jpa ×1
linq ×1
multi-tenant ×1
primary-key ×1
scaffolding ×1