我在媒体和标签之间有很多关系:
介质:
@ManyToMany(fetch=FetchType.EAGER)
@IndexColumn(name="tags_index_column")
@JoinTable(name="tag_map",
joinColumns={@JoinColumn(name="tag_id")},
inverseJoinColumns={@JoinColumn(name="item_id")})
private List<Tag> tags;
Run Code Online (Sandbox Code Playgroud)
标签:
@ManyToMany(mappedBy="tags")
@JoinTable(name="tag_map",
joinColumns={@JoinColumn(name="item_id")},
inverseJoinColumns={@JoinColumn(name="tag_id")})
private List<Medium> media;
Run Code Online (Sandbox Code Playgroud)
我尝试从hql查询连接表,但我总是得到一个例外:
String resultQueryString = "From tag_map"
Query resultQuery SessionFactory.getCurrentSession().createQuery(resultQueryString);
Run Code Online (Sandbox Code Playgroud)
例外:
org.springframework.orm.hibernate3.HibernateQueryException: tag_map is not mapped [From tag_map]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: tag_map is not mapped [From tag_map]
Run Code Online (Sandbox Code Playgroud)
我基本上想要做的是查询具有特定id的标签的所有媒体.不幸的是我无法访问连接表.
有什么建议?:)
作为Ruby on Rails的新手,我正在阅读Rails指南,今晚是Active Record Migrations.
在完成关于连接表的部分(http://guides.rubyonrails.org/active_record_migrations.html#creating-a-join-table)之后,我留下的印象是使用create_join_table比创建更好(并且更简单)通过rails生成模型连接表.
这是正确的假设吗?我应该注意细微差别吗?
| AA | 多对多| BB | 多对多| CC |
用连接表映射成了
| AA | - | AA_BB | - | BB | - | BB_CC | - | CC |
(我不能张贴图片抱歉,声誉低)
编辑:简短问题是为什么如果创建一个Aa元素,Bb元素,Cc元素添加Cc到Bb集合,Bb到Aa集合保存(Aa)工作正常(AA_BB填充)?
但是如果我创建一个Bb元素,Aa元素,Cc元素将Aa添加到Bb集合中将Cc添加到Bb集合中保存(Bb)(AA_BB 未填充?)
BB_CC总是被填满.
结束编辑
CREATE TABLE BB_CC (
BBIDBB number(10) NOT NULL,
CCIDCC number(10) NOT NULL,
PRIMARY KEY (BBIDBB,
CCIDCC));
CREATE TABLE AA_BB (
AAIDAA number(10) NOT NULL,
BBIDBB number(10) NOT NULL,
PRIMARY KEY (AAIDAA,
BBIDBB));
CREATE TABLE CC (
IDCC number(10) NOT NULL,
DESCR varchar2(10) NOT NULL, …
Run Code Online (Sandbox Code Playgroud) 我正在使用JPA从现有的ERP系统中提取数据.我正在为某些数据使用(现有)连接表.问题是我还应该匹配不在连接表上的列,而是匹配源表本身.
T1 (source)
- F1*
- F2
- F3
- ..
T2 (join)
- F4
- F5
T3 (source)
- F6*
- F7
- F8
- ..
Run Code Online (Sandbox Code Playgroud)
我当前的连接表条件是这样的:
@ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="T2", schema=Util.schema, joinColumns = {
@JoinColumn(name="F4", referencedColumnName="F2", unique=false),
@JoinColumn(name="F5", referencedColumnName="F3", unique=false)
},
inverseJoinColumns = {
@JoinColumn(name="F4", referencedColumnName="F7", unique=false),
@JoinColumn(name="F5", referencedColumnName="F8", unique=false)
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我如何/在哪里添加条件T1.F1 = T3.F6?
我在两个表之间使用 JOIN 时遇到问题,这是我的表:
病人表
........................................
uid | no_mr | name
........................................
1 | 1101 | Eko
2 | 1102 | John Doe
Run Code Online (Sandbox Code Playgroud)
访问表
..............................................
uid | vcode | patient_id
..............................................
1 | V-20130725143528 | 1
2 | V-20130726132308 | 2
3 | V-20130726142907 | 2
4 | V-20130726144436 | 1
Run Code Online (Sandbox Code Playgroud)
如何根据访问表显示患者数据,并按visit.uid降序排列。
这是我的查询,
SELECT patient . * , visit.uid
FROM patient
LEFT JOIN visit ON patient.uid = visit.patient_id
WHERE patient.uid >1
GROUP BY patient.no_mr
ORDER BY visit.uid DESC
LIMIT 0 , …
Run Code Online (Sandbox Code Playgroud) 我的数据库中有两个表。
Movies
桌子:
+----------------------------------------
| ID | title | timestamp |
+----------------------------------------
| 1 | The host | time |
| 2 | Fight Club | time |
| 4 | 21 | time |
----------------------------------------+
Run Code Online (Sandbox Code Playgroud)
Movie_Links
桌子:
+---------------------------------------+
| ID | link | movie_id |
+---------------------------------------+
| 1 | some link | 1 |
| 2 | some link | 1 |
| 3 | some link | 1 |
+---------------------------------------+
Run Code Online (Sandbox Code Playgroud)
目前我只从Movies
表中选择行title
,例如:
SELECT * FROM …
Run Code Online (Sandbox Code Playgroud) 我正在尝试更改Visitor
表中用于User
id 的外键列名.该列现在命名user_id
,我想将其更改为who_id
.
最小User
域类:
class User {
static hasMany = [
visitor: Visitor
]
String uid
...
}
Run Code Online (Sandbox Code Playgroud)
最小Visitor
域类:
class Visitor {
static belongsTo = [user: User]
....
}
Run Code Online (Sandbox Code Playgroud)
我试过mappedBy
但没有成功,是否有另一种方法可以使用属性User
作为外键Visitor
?
我目前正在重构Rails应用程序中使用的表.在整个开发过程中,人们使用各种不同的方法来创建要使用的连接表has_and_belongs_to_many
.
我应该使用以下三种格式中的哪一种;
id,table_a_id,table_b_id,created_at,updated_at
id,table_a_id,table_b_id
table_a_id,table_b_id
我倾向于第三个选项,因为在我的应用程序中我们不关心何时建立关系,也没有看到ID中的要点,因为我们永远不会直接查询该表.
这是短视的吗?包含所有字段的开销将是最小的,但如果他们只是坐在那里没有被使用,我宁愿我们没有它们.
我正在尝试创建一个名为 :books_users 的连接表,其中书籍中的一列 :claim 是一个布尔值,如果有人单击“查看此书”的链接,则书籍控制器中的声明操作会执行以下操作:
def claim
book = Book.find(params[:id])
book.claims << current_user unless book.claims.include?(current_user)
redirect_to current_user
flash[:notice] = "You have a new book to review!"
end
Run Code Online (Sandbox Code Playgroud)
这样做的目的是让我的用户注册为评论者可以进入图书展示页面,如果他们决定评论评论者通过流派找到的作者上传的书?然后他们基本上表明他们要评论那本书,他们的评论最终将作为经过验证的购买评论显示在亚马逊上,而不是书籍显示页面上网站上的俗气文本评论(这将使注册的作者审核服务很开心)。
我的模型看起来像这样:
book.rb
class Book < ApplicationRecord
mount_uploader :avatar, AvatarUploader
belongs_to :user
has_and_belongs_to_many :genres
has_and_belongs_to_many :claims, join_table: :books_users, association_foreign_key: :user_id
end
user.rb
class User < ApplicationRecord
mount_uploader :avatar, AvatarUploader
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :books
enum …
Run Code Online (Sandbox Code Playgroud) arrays ruby-on-rails associations has-and-belongs-to-many jointable
我试图找出一个查询,该查询显示在 2 个以上部门工作的员工的姓名以及他们的工资和联系方式。我有两张表员工和部门。这两个都有 EmployeeName 字段。我知道我们必须使用 Count 函数,但真的不知道如何创建查询。
这里是表名和字段:
Employee
(员工姓名、工资、联系人编号)Department
(员工姓名、部门编号、工作时间、开始日期)