我正在使用Hibernate 3.3和PostgreSQL 8.x,并希望使用Hibernate注释来映射不是主键的自动递增列.
使用SERIAL类型或Postgres中的序列映射列无关紧要,只要它由数据库而不是Hibernate自动递增即可.我尝试了以下映射,但它们始终生成null orderId.
@Column(name = "orderId", insertable = false)
@Generated(GenerationTime.INSERT)
//@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
private Integer orderId;
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何帮助.
谢谢
在Python中,有一种方便的方法可以获取名为"切片"的列表的一部分:
a = [1,2,3,4,5,6,7,8,9,10] # ? a = range(1,10)
a[:3] # get first 3 elements
a[3:] # get all elements except the first 3
a[:-3] # get all elements except the last 3
a[-3:] # get last 3 elements
a[3:7] # get 4 elements starting from 3rd (? from 3rd to 7th exclusive)
a[3:-3] # get all elements except the first 3 and the last 3
Run Code Online (Sandbox Code Playgroud)
clojure.repl/doc在Clojure中玩,我找到了所有这些的等价物,但我不确定它们是不是惯用的.
(def a (take 10 (iterate inc 1)))
(take 3 a)
(drop 3 …Run Code Online (Sandbox Code Playgroud) 这些内置的Python数据类型有什么区别:列表,序列和切片?在我看来,这三者基本上代表了C++和Java调用数组.
有没有办法为Hibernate中的每个表指定不同的序列,如果ID是在映射的超类上定义的?
我们的应用程序中的所有实体都扩展了一个名为的超类DataObject:
@MappedSuperclass
public abstract class DataObject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id")
private int id;
}
@Entity
@Table(name = "entity_a")
public class EntityA extends DataObject { ... }
@Entity
@Table(name = "entity_b")
public class EntityB extends DataObject { ... }
Run Code Online (Sandbox Code Playgroud)
这会导致所有实体使用默认的共享序列hibernate_sequence.
我希望做的是使用一个单独的序列为每个实体,例如entity_a_sequence与entity_b_sequence上面的例子.如果在子类上指定了ID,那么我可以使用@SequenceGenerator注释为每个实体指定序列,但在这种情况下,ID在超类上.鉴于ID在超类中,是否有一种方法可以为每个实体使用单独的序列 - 如果是,那么如何?
(我们正在使用PostgreSQL 8.3,如果相关的话)
我试图找到一种简单的方法来循环(迭代)数组以找到序列中所有缺少的数字,该数组看起来有点像下面的那个.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
对于上面的数组我需要0189462并0189464注销.
更新:这是我从Soufiane的回答中使用的确切解决方案.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
var mia= [];
for(var i = 1; i < numArray.length; i++)
{
if(numArray[i] - numArray[i-1] != 1)
{
var x = numArray[i] - numArray[i-1];
var j = 1;
while (j<x)
{
mia.push(numArray[i-1]+j);
j++;
}
}
}
alert(mia) // returns [0189462, 0189464]
Run Code Online (Sandbox Code Playgroud)
UPDATE
这是使用.reduce的整洁版本
var numArray = [0189459, 0189460, 0189461, 0189463, 0189466];
var mia = numArray.reduce(function(acc, cur, …Run Code Online (Sandbox Code Playgroud)我正在从MySql迁移到Postgres,我注意到当您从MySql中删除行时,这些行的唯一ID会在您创建新行时重复使用.使用Postgres,如果您创建行并删除它们,则不会再次使用唯一ID.
在Postgres有这种行为的原因吗?在这种情况下,我可以使它更像MySql吗?
我已经创建了一个序列:
create sequence mainseq as bigint start with 1 increment by 1
Run Code Online (Sandbox Code Playgroud)
如何将此序列用作列的默认值?
create table mytable(
id bigint not null default mainseq -- how?
code varchar(20) not null
)
Run Code Online (Sandbox Code Playgroud) 我想使用Enumerable.Aggregate(...)方法来连接由分号分隔的字符串列表.相当容易,不是吗?
考虑以下因素:
private const string LISTSEPARATOR = "; ";List<TrackDetails>如果Distinct()返回的序列为空(由于Aggregate()方法不适用于空序列),以下语句将抛出异常:
txtDiscNumber.Text = album.OrderedTracks
.Where(a => a.DiscNumber.HasValue)
.Select(a => a.DiscNumber.Value.ToString())
.Distinct()
.Aggregate((i, j) => i + LISTSEPARATOR + j);
Run Code Online (Sandbox Code Playgroud)
我正在使用的解决方法:
List<string> DiscNumbers =
album.OrderedTracks
.Where(a => a.DiscNumber.HasValue)
.Select(a => a.DiscNumber.Value.ToString())
.Distinct()
.ToList();
if (!DiscNumbers.Any())
txtDiscNumber.Text = null;
else
txtDiscNumber.Text =
DiscNumbers.Aggregate((i, j) => i + LISTSEPARATOR + j);
Run Code Online (Sandbox Code Playgroud)
有没有更好的解决方案?是否可以在单个LINQ语句中执行此操作?
提前致谢.
我正在尝试在MySQL中创建一个序列(我对SQL作为一个整体非常新).我正在使用以下代码,但它会导致错误:
CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;
Run Code Online (Sandbox Code Playgroud)
ORDID指的是我正在使用的表中的字段.如何正确创建序列?
编辑:
据称,MySQL不使用序列.我现在使用以下代码,但这也导致错误.我该如何解决?
CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code
Run Code Online (Sandbox Code Playgroud)
编辑:
我想我找到了解决办法.对于phpMyAdmin(我正在使用),您可以使用以下代码.
ALTER TABLE ORD AUTO_INCREMENT = 622;
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它更喜欢这个,但如果其他人需要帮助,那么你去吧.:)